En utilisant la DateTime
classe, si j'essaye d'exécuter le code suivant:
$mydate = new DateTime();
echo $mydate->date;
Je vais récupérer ce message d'erreur
Avis: Propriété non définie: DateTime :: $ date ...
Ce qui n'a pas de sens car lors de l'exécution var_dump()
sur la variable $mydate
, cela montre clairement que cette propriété existe et est accessible au public:
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)
Est-ce un bug dans PHP ou est-ce que je fais quelque chose de mal? J'utilise PHP 5.4.3.
Réponses:
Il s'agit d'un problème connu .
Pour une raison quelconque, vous n'êtes pas censé pouvoir accéder à la propriété, mais la
var_dump
montre quand même. Si vous voulez vraiment obtenir la date dans ce format, utilisez laDateTime::format()
fonction.la source
En plus d'appeler,
DateTime::format()
vous pouvez accéder à la propriété en utilisant la réflexion:C'est un peu plus rapide que l'utilisation
format()
carformat()
formate une chaîne temporelle qui a déjà été formatée. Surtout si vous le faites plusieurs fois en boucle.Cependant, ce n'est pas un comportement régulier de PHP. Un rapport de bogue a déjà été déposé sous le nom @Nile mentionné dans les commentaires ci-dessus.
la source
Comme indiqué par les autres réponses, c'est un problème avec PHP qui n'est pas résolu à ce jour, mais s'il s'agit d'un «effet secondaire»,
var_dump()
je ne suis pas si sûr.Ce dont je suis sûr, c'est que si les propriétés de l'
DateTime
endroit où nous voulions être utilisées, elles auraient été rendues disponibles. Mais comme beaucoup de classes internes, elles ne le sont pas et vous ne devriez pas vous fier à des méthodes «hacky» ou «glitchy» pour corriger votre code. Au lieu de cela, vous devez utiliser leur API .Si vous n'êtes pas satisfait, vous pouvez étendre la classe ou peut-être utiliser Carbon qui l'étend pour vous.
Si vous savez comment
var_dump()
créer une fausse sortie d'un objet, jetez un œil à__debugInfo()
la source
La propriété date de DateTime est protégée.
Vous pouvez afficher la date avec la fonction de format.
Ou vous pouvez convertir en tableau:
la source
Si vous utilisez simplement un var_Dump avant de demander la date de propriété, tout fonctionne correctement:
Cela offre:
Vous voyez donc que la date de propriété existe même pour l'objet. Je ne comprends pas ce comportement. Mettez simplement en commentaire le var_Dump et vous obtiendrez à nouveau l'erreur.
la source