【问题标题】:Strange behaviour when accessing objects [duplicate]访问对象时的奇怪行为[重复]
【发布时间】:2016-06-26 16:53:01
【问题描述】:

这是我的代码:

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

它只回显“而回显 date1”,换句话说,$date1->date 是空的。
如果我像这样首先添加转储日期1:

$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

这就是我想要的。这件事让我很生气,因为它完全出乎意料。

【问题讨论】:

  • var_dump($date1);正在输出 2016-06-26 16:54:56.000000 这就是它们不同的原因
  • var_dump()....:):) 删除并检查
  • 我不确定这是否只是在询问为什么会发生这种情况,或者您是否想弄清楚如何使用 DateTime?您应该使用 echo $date1->format('Y-m-d H:i:s'); 而不是依赖 $date 属性。您必须查看 DateTime 类的代码,但我假设 $date 属性未由构造函数或格式方法填充。
  • 我需要知道如何在不进行转储的情况下访问日期属性
  • php.net/manual/en/class.datetime.php 似乎没有->date,所以我不明白为什么在第二个示例中会输出输出

标签: php


【解决方案1】:

format 选项不是用于设置对象的格式,它是一种将日期对象作为请求格式的字符串返回的方法:

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

为了澄清,您在对象中看到的“日期”只是为了方便起见的文本表示,因为在内部它将以优化的方式保存。如果要将其添加到字符串中,则需要指定所需的格式:

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

【讨论】:

  • 如果是这样,为什么第一个不输出?
  • @SuperCoolHandsomeGelBoy,并不是真正的现象。手册中没有建议使用$date 属性,您只需要查看何时在类中设置$date 属性即可。
  • 是的,但是为什么我只能在转储对象后才能访问该属性?是不是很奇怪??
  • @Devon 抱歉,我更改了评论
  • @Ferex,看看stackoverflow.com/questions/14084222/…。一眼看去,$date 属性仅用于调试。
猜你喜欢
  • 2021-12-13
相关资源
最近更新 更多