Php 非常",;“有趣”;DateTime对象的行为和对其元素的访问-奇怪 我不认为这是一个重复,每个说,因为另一个问题谈到VARYDUP不打印。我认为其他人可能会使用print\r遇到这个问题,因此他们会找到我的问题和答案,并且可能会错过其他问题。我没有找到另一个,就是。
我正在编写一些代码,通过从当前日期减去天数来计算日期。我通过Php 非常",;“有趣”;DateTime对象的行为和对其元素的访问-奇怪 我不认为这是一个重复,每个说,因为另一个问题谈到VARYDUP不打印。我认为其他人可能会使用print\r遇到这个问题,因此他们会找到我的问题和答案,并且可能会错过其他问题。我没有找到另一个,就是。,php,date,Php,Date,我正在编写一些代码,通过从当前日期减去天数来计算日期。我通过getdate()函数获得了当前日期。然后我用date\u sub()减去天数 在测试过程中,我遇到了一些问题,因此我加入了一些echo和print\r()语句 我终于让它正常工作了,我拿出了echo和print\r()语句 当我运行代码时,在第8行出现了一个错误:E_注意:type 8——未定义的属性:DateTime::$date 所讨论的语句是对DateTime对象的date元素的引用。我想,当我注释掉echo和print\r()
getdate()
函数获得了当前日期。然后我用date\u sub()
减去天数
在测试过程中,我遇到了一些问题,因此我加入了一些echo
和print\r()
语句
我终于让它正常工作了,我拿出了echo
和print\r()
语句
当我运行代码时,在第8行出现了一个错误:E_注意:type 8——未定义的属性:DateTime::$date
所讨论的语句是对DateTime对象的date元素的引用。我想,当我注释掉echo
和print\r()
语句时,可能是我搞错了,所以我取消了更改并尝试了它——它没有出错
然后,我非常小心地删除了echo
和print\r()
stagements并再次尝试-砰!同样的错误
我坐在那里盯着屏幕看了一会儿,开始想是哪个echo
和print\r()
语句阻止了这个错误。最后,我将其缩小为一个显示DateTime对象的print\u r()。如果我将其保留在中,则不会发生错误,并且输出是正确的。如果我把它注释掉了,错误就发生了
我做了更多的观察,然后找出引用DateTime对象数据元素的另一种方法。我发现我可以用object->format()得到同样的结果
但是这种奇怪的行为一直困扰着我,我来这里是为了展示它,看看是否有人对它的发生有任何理论
下面是演示该问题所需的最低编码
<?php
$today = date_create();
print_r($today);
echo '<br>';
print_r($today->date);
?>
如果您将该声明注释掉,您将得到:
E_NOTICE : type 8 -- Undefined property: DateTime::$date -- at line 5
您可能很难相信这一点-请访问fiddle.org并使用代码
注释掉第一个print_r()就得到了错误。取消注释,则不会出现错误
如果将print_r()
语句替换为不引用DateTime对象的语句,例如print_r('Hey there')代码>--您将得到错误。不是print\u r()函数本身,而是用DateTime调用print\u r()
以某种方式防止了错误
因此-您对该print\u r()
语句所做的使DateTime对象的数据元素的引用“不正确”的事情有何看法。这是众所周知的:
->在这里,日期可用实际上是支持var_dump()的副作用。我将此标记为功能请求,因为它不打算工作
derrick@php.net
您应该使用->format()打印日期时间
可能是重复的啊-我不明白你的意思。我不知道要显示什么DateTime对象,我在print_r()语句中输入了什么来查看发生了什么,而不是作为实际功能的一部分。此外,如果不查找单个元素,而只指定对象本身,则print\u r()也会起作用。@SimonT->date
是私有的,但使用print\u r
/var\u dump
后的错误会将其公开
E_NOTICE : type 8 -- Undefined property: DateTime::$date -- at line 5
echo $today->format("Y-m-d H:m:s");