We have very strange errors occasionally popping up in our php logs: Trying to get property of non-object.
This exact error seems to be caused by the access to the member $shortName
in the following if statement:
class MyLocaleWrapper extends SomeOtherClass {
…
protected static $system = NULL;
public static function getSystemLocale() {
if (self::$system === NULL) {
self::$system = new self();
debug(self::$system);
self::$system->rfcName = SYSTEM_LOCALE_RFCNAME;
self::$system->shortName = strtolower(Locale::getRegion(self::$system->rfcName));
if (self::$system->shortName == '') {
self::$system->shortName = strtolower(self::$system->rfcName);
}
…
# in another file:
class SomeOtherClass {
…
public function __construct() {
# Some documentation about features that have been
# removed from the constructor, but no real code in here.
return NULL;
}
…
# in yet another file:
MyLocaleWrapper::getSystemLocale();
if I dump self::$system
into a log file, I see that it is NULL
- right after being constructed with the keyword new
.
The most interesting part is that this file is included in each and every request to our page, so it gets executed ~ 10 times per second. But occasionally it just fails without anyone touching the code (or even the server).
Has anyone else ever experienced such behavior in PHP?
Thanks for all the updates. (see extensive comments above on original post).
Unfortunately, I'm as stumped as you are -- everything looks fine with that code.
Either
If it were my production system to deal with, I'd probably comment out the return NULL
in the constructor, and let it run in production for a while. That return shouldn't cause any problems, but it's the only strange thing I can see here.
Sorry I can't help more than that. Please come back and let us know if you figure it out.
We finally found out we were running into php bug #50027. After setting the php.ini-variable zend.enable_gc
to false, the error vanished.
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