I got this error in several places of code, when I tried to deploy Symfony 2.8 project on new local machine:
"Warning: get_class() expects parameter 1 to be object, null given"
Haven't find such case on stackoverflow and spent some time to figure out the reason.
As stated elsewhere on this question, in PHP 7.2 get_class
manual states:
Note: Explicitly passing NULL as the object is no longer allowed as of PHP 7.2.0. The parameter is still optional and calling get_class() without a parameter from inside a class will work, but passing NULL now emits an E_WARNING notice.
As you found with your own answer.
However you stated:
So downgrading php version to 7.1 solved the problem.
Downgrading PHP is not usually the best or long term way to solve problems*; instead you need to wrap the get_class
in a checker function such as is_object
, or inversely, is_null
:
$baz = new class();
$className = false; // catch all if $baz is not an object
if(is_object($baz)){
$className = get_class($baz);
}
I would say that while it may be fiddly to "fix" Symphony code, I would suggest adding the qualifier is_object
to the Symphony code and then updating to the latest Symphony version when it comes out (which I hope would fix this issue).
The latest versions of Symfony 2.7 and 2.8 should be fully compatible with PHP7.2, however I was still getting this error. Upgrading sonata-project/user-bundle from 3.3 to 3.6 resolved that issue.
The reason is the difference of PHP versions. This new warning was implemented in PHP 7.2 - https://wiki.php.net/rfc/get_class_disallow_null_parameter
So downgrading php version on my local machine to 7.1 (like it is on production server) solved the problem.
I believe that upgrading vendors might solve it too, but in my case this way is not welcome by customer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With