猿问

为什么我不能访问PHP的datetime类中的datetime->date?是虫子吗?

为什么我不能访问PHP的datetime类中的datetime->date?是虫子吗?

使用DateTime类,如果我试图运行以下代码:

$mydate = new DateTime();echo $mydate->date;

我会得到这条错误信息

注意:未定义的属性:datetime:$date.

这没什么意义,因为当你跑的时候var_dump()关于变量$mydate,它清楚地表明,这一财产是存在的,并且可以公开访问:

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)

这是PHP中的一个bug,还是我做错了什么?我使用的是PHP 5.4.3。


慕工程0101907
浏览 464回答 3
3回答

墨色风雨

这是一个已知问题.可用日期实际上是支持var_dump()这里-Derick@php.net出于某种原因,你不应该能够访问这个属性,但是var_dump不管怎样都能显示出来。如果您确实希望以该格式获取日期,请使用DateTime::format()功能。echo $mydate->format('Y-m-d H:i:s');

慕后森

除使用外DateTime::format()可以使用反射访问该属性:<?php $dt&nbsp;=&nbsp;new&nbsp;DateTime();$o&nbsp;=&nbsp;new&nbsp;ReflectionObject($dt);$p&nbsp;=&nbsp;$o->getProperty('date');$date&nbsp;=&nbsp;$p->getValue($dt));这比使用format()因为format()格式化已格式化的时间字符串。特别是当你在一个循环中做很多次的时候。然而,这不是PHP的常规行为。上述评论中提到的@尼罗河已经提交了一个Bugreport。

守着星空守着你

正如其他答案所指出的,这是PHP的一个问题,到今天仍未解决,但如果它是var_dump()我不太确定.。echo&nbsp;((array)&nbsp;new&nbsp;DateTime())['date'];&nbsp;//&nbsp;Works&nbsp;in&nbsp;PHP&nbsp;7.我确信的是如果的性质DateTime在我们打算使用的地方,它本来是可以使用的。但就像许多内部类一样不而且,您不应该依赖“hacky”或“glitchy”方法来修复您的代码。相反,你应该使用他们的API.echo&nbsp;(new&nbsp;DateTime())->format('Y-m-d&nbsp;H:i:s');如果您不满意,可以扩展类,或者使用碳为你扩展了它。echo&nbsp;(new&nbsp;Carbon())->toDateTimeString();如果你想知道var_dump()创建对象的假输出__debugInfo()
随时随地看视频慕课网APP
我要回答