get_class()期望参数1为object,给定null

时间:2018-04-10 11:03:09

标签: php

当我尝试在新的本地计算机上部署Symfony 2.8项目时,我在几个代码位置出现此错误:

"Warning: get_class() expects parameter 1 to be object, null given"

在stackoverflow上没有找到这样的情况,并花了一些时间来弄清楚原因。

3 个答案:

答案 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);
} 
  • 正如Nicco Hasse所述 如果在Symfony代码中出现此问题,只需更改Symfony代码不是一个好主意。由于升级Symfony不是一种选择,如OP的回答所述,保持7.1似乎是最佳解决方案

我想说虽然“修复”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(就像在生产服务器上一样)解决了这个问题。

我相信升级供应商也可以解决它,但就我而言,客户不欢迎这种方式。