当我尝试在新的本地计算机上部署Symfony 2.8项目时,我在几个代码位置出现此错误:
"Warning: get_class() expects parameter 1 to be object, null given"
在stackoverflow上没有找到这样的情况,并花了一些时间来弄清楚原因。
答案 0 :(得分:2)
正如本问题其他部分所述,在PHP 7.2 get_class
手册中指出:
注意:自PHP 7.2.0起,不再允许显式传递NULL作为对象。该参数仍然是可选的,并且在类中没有参数的情况下调用get_class()将起作用,但是传递NULL现在会发出E_WARNING通知。
正如您在your own answer找到的那样。
然而 您说:
所以将php版本降级到7.1解决了这个问题。
降级PHP通常不是解决问题的最佳或长期方式*;相反,您需要将get_class
包含在 checker 函数中,例如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);
}
我想说虽然“修复”Symphony代码可能很繁琐,但我建议将限定符is_object
添加到Symphony代码中,然后在出现时更新到最新的Symphony版本(我希望会解决这个问题)。
答案 1 :(得分:1)
latest versions of Symfony 2.7 and 2.8 should be fully compatible with PHP7.2,但我仍然收到此错误。将sonata-project / user-bundle从3.3升级到3.6解决了这个问题。
答案 2 :(得分:0)
原因是PHP版本的差异。这个新警告在PHP 7.2中实现 - https://wiki.php.net/rfc/get_class_disallow_null_parameter
因此将本地计算机上的php版本降级为7.1(就像在生产服务器上一样)解决了这个问题。
我相信升级供应商也可以解决它,但就我而言,客户不欢迎这种方式。