1.错误代码–控制器层
$params = [
'file' => request()->file('file'),
'hash' => input('hash', ''),
];
$a = file_get_contents($params['file']);
var_dump($a);die();
2.正确代码–entity实体类层
$params = [
'file' => request()->file('file'),
'hash' => input('hash', ''),
];
$res = \app\entity\Sync::oneOrderUpdate($params['file'], $params['hash']);
public static function oneOrderUpdate($file, $hash)
{
$content = self::getTextFileData($file);
$res = self::orderUpdate($content, $hash);
}
private static function getTextFileData($file)
{
$content = file_get_contents($file);
return json_decode($content, true);
}
3.比较
第二种写法在file_get_contents之前使用$file->getType()获取到的也是file文件类型,实体类里面没有严格约束。会导致php把对象当作字符串使用(依赖__toString())
PHP 8 + strict_types=1 下不会再把对象自动转字符串
4.解决
4.1 去掉控制器层的严格约束
declare (strict_types = 1);
