Warning: Creating default object from empty value

El titulo muestra el mensaje que despliega PHP cuando se intenta manejar una variable como si fuese un objeto (por ejemplo cuando sobre una variable vacía intentamos asignar valor a una propiedad).

<?php

$usuario->nombre = 'Salvador';
$usuario->apellido = 'Mendez';

?>

Hasta PHP 5.4 los mensajes E_STRICT no estaban incluidos en E_ALL, por lo que el código anterior no mostraba ningún tipo de error en la mayoría de configuraciones de servidores PHP. Pero a partir de 5.4 obtendremos «Warning: Creating default object from empty value in …».

Info extraída del manual de PHP:

En PHP 5 está disponible el nuevo nivel de error E_STRICT. Antes de PHP 5.4.0, E_STRICT no estaba incluido dentro de E_ALL, por lo que se teniía de habilitar explícitamente este tipo de nivel de error en PHP < 5.4.0. La habilitación de E_STRICT durante el desarrollo tiene algunos beneficios. Los mensajes STRICT proporcionan sugerencias que pueden ayudar a asegurarse de la mejor interoperabilidad y la compatibilidad hacia delante del código. Estos mensajes pueden incluir cosas como llamar a métodos no estáticos de forma estática, definir propiedades en una definición de clase compatible mientras se definió en un trait usado, y antes de PHP 5.3, algunas características obsoletas emitirían errores E_STRICT como asignar objetos por referencias durante la instanciación.

Es una forma de intentar que se respete el paradigma de orientación a objetos, así los mensajes E_STRICT ayudan a generar código PHP que ofrezca una mayor compatibilidad con versiones futuras.

Para evitar que se muestre ese error, debemos asegurarnos que trabajamos con objetos, generando uno vacío cuando no lo son:

<?php

if(!is_object($usuario))
{
    $usuario = new stdClass;
}

$usuario->nombre = 'Salvador';
$usuario->apellido = 'Mendez';

?>

Un comentario en «Warning: Creating default object from empty value»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *