一尘不染

print_r()将属性添加到DateTime对象

php

考虑以下代码示例:

$m_oDate = new DateTime('2013-06-12 15:54:25');
print_r($m_oDate);
echo $m_oDate->date;

从PHP 5.3开始,这将产生(类似)以下输出:

DateTime Object
(
    [date] => 2013-06-12 15:54:25
    [timezone_type] => 3
    [timezone] => Europe/Amsterdam
)
2013-06-12 15:54:25

但是下面的代码:

$m_oDate = new DateTime('2013-06-12 15:54:25');
echo $m_oDate->date;

…仅发出错误:

Notice: Undefined property: DateTime::$date in ...

为什么print_r()将这些属性“添加”到对象?请注意,它们没有定义为手册页DateTime`上的类的一部分。


阅读 223

收藏
2020-05-26

共1个答案

一尘不染

发生了一些魔术,但这很简单。

DateTime类没有您要访问的公共变量“date”。但是,作为PHP工作方式的副作用,在该类上调用print_r或var_dump时会创建一个变量。

魔术发生后,“日期”可用,但不应该。您应该只使用getTimestamp函数来使您的代码可靠地工作。

2020-05-26