当我尝试在新的本地计算机上部署Symfony 2.8项目时,在多个代码位置出现了此错误:
"Warning: get_class() expects parameter 1 to be object, null given"
Run Code Online (Sandbox Code Playgroud)
尚未在stackoverflow上找到这种情况,并花了一些时间找出原因。
正如该问题的其他地方所述,在 PHP 7.2get_class手册中指出:
注意:从 PHP 7.2.0 开始,不再允许显式传递 NULL 作为对象。该参数仍然是可选的,并且从类内部调用没有参数的 get_class() 将起作用,但是现在传递 NULL 会发出 E_WARNING 通知。
正如您在自己的答案中发现的那样。
但是你说:
所以将php版本降级到7.1解决了这个问题。
降级 PHP 通常不是解决问题的最佳或长期方法*;相反,您需要将 包装get_class在检查器函数中,例如is_object,或相反,is_null:
$baz = new class();
$className = false; // catch all if $baz is not an object
if(is_object($baz)){
$className = get_class($baz);
}
Run Code Online (Sandbox Code Playgroud)
我会说,虽然“修复” Symphony 代码可能很繁琐,但我建议将限定符添加is_object到 Symphony 代码,然后在它出现时更新到最新的 Symphony 版本(我希望这会解决这个问题)。
原因是PHP版本的差异。这个新警告是在 PHP 7.2 中实现的 - https://wiki.php.net/rfc/get_class_disallow_null_parameter
因此,将本地计算机上的 php 版本降级到 7.1(就像在生产服务器上一样)解决了问题。
我相信升级供应商也可能解决这个问题,但就我而言,这种方式不受客户欢迎。
| 归档时间: |
|
| 查看次数: |
4250 次 |
| 最近记录: |