Me pasó algo que considero un poco extraño, lo comparto. Quizás a alguien le sirva o pueda explicar que es exactamente lo que pasó.
Tengo una clase llamada Sesion, es poco más que una envoltura para el array $_SESSION.
Implementa un patron singleton. Utilizo el método instancia que me devuelve, por supuesto, un objeto del tipo Sesion.
Parte del código de Sesion.
Código PHP:
class Sesion {
private function __construct() {
// bla bla
}
public static function instancia() {
if (!isset(self::$_instancia)) {
self::$_instancia = new self;
}
return self::$_instancia;
}
public function __get($clave) {
return $_SESSION[$clave];
}
}
Todo funciona bien con esta clase, si hago un var_dump de un atributo funciona perfecto.
Código PHP:
var_dump(Sesion::instancia()->usuario);
// Devuelve "string 'nombreDeUsuario'"
Pero si quiero comprobar si el atributo no está vacío de la siguiente manera no funciona.
Código PHP:
if(!empty(Sesion::instancia()->usuario)) {
// nunca entra en esta condición
// como si Sesion::instancia()->usuario estuviese vacío
// cuando en realidad no es así
}
Esta es la solución que encontré: cargandolo en una variable.
Código PHP:
$usuarioStr = Sesion::instancia()->usuario;
if(!empty($usuarioStr)) {
// funciona
}
$sesionObj = Sesion::instancia();
if(!empty($sesionObj->usuario)) {
// NO funciona
}
if(!empty(Sesion::instancia()->usuario)) {
// NO funciona
}
var_dump($usuarioStr); // devuelve string 'nombreUsuario'
var_dump($sesionObj->usuario); // devuelve string 'nombreUsuario'
var_dump(Sesion::instancia()->usuario); // devuelve string 'nombreUsuario'
Edit: Espero se haya entendido. Cualquier duda avisen.