2016-06-26 2 views
0

Это мой код:Странное поведение при доступе к объектам

$date1 = new DateTime(); 
$date1->format('Y-m-d H:i:s'); 
echo $date1->date. ' while echoing date1'; 

Это перекликается только «а вторя date1», другими словами $date1->date пуст.
Если добавить дамп date1 первый, как это:

$date1 = new DateTime(); 
$date1->format('Y-m-d H:i:s'); 
var_dump($date1); 
echo $date1->date. ' while echoing date1'; 

я

object(DateTime)[359] 
    public 'date' => string '2016-06-26 16:54:56.000000' (length=26) 
    public 'timezone_type' => int 3 
    public 'timezone' => string 'UTC' (length=3) 

2016-06-26 16:54:56.000000 while echoing date1

, который я хочу. Эта вещь вызывает у меня безумие, поскольку это совершенно неожиданно.

+1

var_dump ($ date1); выводит 2016-06-26 16: 54: 56.000000, поэтому они разные –

+0

'var_dump()' .... :) :) remove and check –

+1

Я не уверен, что это просто спрашивает, почему это происходит или если вы пытаетесь выяснить, как использовать DateTime? Вы должны использовать формат 'echo $ date1-> ('Y-m-d H: i: s');' не полагаться на свойство '$ date'. Вам нужно будет изучить код класса DateTime, но я бы предположил, что свойство '$ date' не заполнено конструктором или методом форматирования. – Devon

ответ

2

Опция формат не для установки формата объекта, это метод, который возвращает объект даты в виде строки в требуемом формате:

echo $date->format('Y-m-d H:i:s'); 

Чтобы выяснить, что вы видите как " date "внутри объекта является просто текстовым представлением для удобства, так как внутри он будет проводиться оптимизированным образом. Если вы хотите добавить его в строку, вам необходимо указать формат, который вы хотите:

echo "This is the date ".$date->format('c'); 
+0

Если это так, то почему первый не выводит? –

+1

@SuperCoolHandsomeGelBoy, не совсем явление. Нет, где в руководстве предлагается использовать свойство '$ date', вам просто нужно увидеть, когда свойство класса $ date устанавливается в классе. – Devon

+1

Да, но почему я могу получить доступ к собственности только после сброса объекта? Разве это не странно? – Ferex