Usando la DateTime
clase, si intento ejecutar el siguiente código:
$mydate = new DateTime();
echo $mydate->date;
Volveré este mensaje de error
Aviso: Propiedad no definida: DateTime :: $ date ...
Lo cual no tiene sentido porque cuando se ejecuta var_dump()
en la variable $mydate
, muestra claramente que esta propiedad existe y es de acceso público:
var_dump($mydate);
object(DateTime)[1]
public 'date' => string '2012-12-29 17:19:25' (length=19)
public 'timezone_type' => int 3
public 'timezone' => string 'UTC' (length=3)
¿Es esto un error dentro de PHP o estoy haciendo algo mal? Estoy usando PHP 5.4.3.
Respuestas:
Este es un problema conocido .
Por alguna razón, se supone que no debe poder acceder a la propiedad, pero la
var_dump
muestra de todos modos. Si realmente desea obtener la fecha en ese formato, use laDateTime::format()
función.fuente
Además de llamar
DateTime::format()
, puede acceder a la propiedad mediante la reflexión:Esto es un poco más rápido que usarlo
format()
porqueformat()
formatea una cadena de tiempo que ya ha sido formateada. Especialmente si lo haces muchas veces seguidas.Sin embargo, este no es un comportamiento habitual de PHP. Ya se ha presentado un informe de error como @Nile mencionado en los comentarios anteriores.
fuente
Como se señaló en las otras respuestas, es un problema con PHP que no está resuelto a partir de hoy, pero si es un 'efecto secundario' de,
var_dump()
no estoy tan seguro.De lo que estoy seguro es de que si las propiedades de
DateTime
donde estábamos destinados a ser utilizados por nosotros, se habrían puesto a disposición. Pero como muchas clases internas que son no y no se debe confiar en los métodos "hacky" o "glitchy" para fijar el código. En su lugar, debería utilizar su API .Si no está satisfecho, puede extender la clase o tal vez usar Carbon que la extiende por usted.
Si no sabe cómo
var_dump()
crea una salida falsa de un objeto, eche un vistazo a__debugInfo()
fuente
La propiedad de fecha de DateTime está protegida.
Puede mostrar la fecha con la función de formato.
O puede convertir a matriz:
fuente
Si solo usa un var_Dump antes de preguntar la fecha de la propiedad, todo funciona bien:
Esto ofrece:
Entonces ve que la fecha de propiedad existe incluso para el objeto. No puedo entender este comportamiento. Simplemente comente el var_Dump y obtendrá el error nuevamente.
fuente