Tenemos errores muy extraños de vez en cuando apareciendo en nuestra php logs: Trying to get property of non-object.
PHP: objeto que es correcto NULL después de la creación
Este error exacto parece ser causado por el acceso al miembro de $shortName
en la siguiente sentencia if:
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();
si yo tiro self::$system
en un archivo de registro, veo que es NULL
- justo después de haber sido construido con la palabra clave new
.
Lo más interesante es que este archivo está incluido en todas y cada una de las solicitudes a nuestra página, por lo que se ejecuta ~ 10 veces por segundo. Pero de vez en cuando simplemente falla sin que nadie toque el código (o incluso el servidor).
¿Alguien más ha experimentado tal comportamiento en PHP?
¿Hay algo dentro del código que pueda restablecer la instancia estática? – Gordon
Hm ... ¿por qué estás creando una nueva instancia de la clase dentro de la clase? Probablemente estoy equivocado, pero ¿no tendría más sentido crear una sola instancia cuando inicialmente la llamas y consultarla desde dentro con la palabra clave '$ this'? – treeface
@Gordon: el código que pegué está completo, no he dejado nada, pero tengo dificultades para creerlo. – soulmerge