Verwenden der DateTime
Klasse, wenn ich versuche, den folgenden Code auszuführen:
$mydate = new DateTime();
echo $mydate->date;
Ich werde diese Fehlermeldung zurückbekommen
Hinweis: Undefinierte Eigenschaft: DateTime :: $ date ...
Dies ist nicht sinnvoll, da beim Ausführen var_dump()
der Variablen $mydate
deutlich wird, dass diese Eigenschaft vorhanden und öffentlich zugänglich ist:
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)
Ist das ein Fehler in PHP oder mache ich etwas falsch? Ich benutze PHP 5.4.3.
Antworten:
Dies ist ein bekanntes Problem .
Aus irgendeinem Grund sollten Sie nicht in der Lage sein, auf die
var_dump
Unterkunft zuzugreifen, sondern sie trotzdem anzeigen. Wenn Sie das Datum wirklich in diesem Format erhalten möchten, verwenden Sie dieDateTime::format()
Funktion.quelle
Neben dem Aufruf können
DateTime::format()
Sie über Reflection auf die Eigenschaft zugreifen:Dies ist etwas schneller als die Verwendung,
format()
daformat()
ein Zeitformat formatiert wird, der bereits formatiert wurde. Vor allem, wenn Sie es oft in einer Schleife tun.Dies ist jedoch kein reguläres Verhalten von PHP. Ein Bugreport wurde bereits als @Nile eingereicht, wie in den obigen Kommentaren erwähnt.
quelle
Wie aus den anderen Antworten hervorgeht, handelt es sich um ein Problem mit PHP, das bis heute ungelöst ist. Wenn es sich jedoch um einen Nebeneffekt handelt,
var_dump()
bin ich mir nicht so sicher.Was ich sicher bin , ist , dass , wenn die Eigenschaften von
DateTime
denen von uns verwendet werden sollte wäre es verfügbar gemacht wurde. Aber wie viele interne Klassen sind sie es nicht und Sie sollten sich nicht auf "hacky" oder "glitchy" Methoden verlassen, um Ihren Code zu reparieren. Stattdessen sollten Sie ihre API verwenden .Wenn Sie nicht zufrieden sind, können Sie die Klasse erweitern oder Carbon verwenden , das sie für Sie erweitert.
Wenn Sie sich fragen, wie
var_dump()
eine gefälschte Ausgabe eines Objekts erstellt wird, schauen Sie sich das an__debugInfo()
quelle
Die Datumseigenschaft von DateTime ist geschützt.
Sie können das Datum mit der Formatierungsfunktion anzeigen.
Oder Sie können in ein Array konvertieren:
quelle
Wenn Sie nur einen var_Dump verwenden, bevor Sie nach dem Datum der Eigenschaft fragen, funktioniert alles in Ordnung:
Dies liefert:
Sie sehen also, dass das Eigenschaftsdatum auch für das Objekt vorhanden ist. Ich kann dieses Verhalten nicht verstehen. Kommentieren Sie einfach den var_Dump aus und Sie erhalten den Fehler erneut.
quelle