PHP print_r写变量神秘?

时间:2015-06-09 21:18:50

标签: php debugging datetime web

我在网络客户端遇到了一些非常奇怪的行为,我正在努力。基本上我将过期日期作为字符串传递给我,我将其解析为DateTime,以便将其与当前时间进行比较(以确定某些事物是否已过期。)

下面是有问题的代码段(注意:$ expiration设置在此代码段之上,我只是用我实际打算使用的值重写它)

$expiration = DateTime::createFromFormat("y-m-d h:i:s", $expiration);
$now = date('y-m-d h:i:s', time());

Common::log("before : ", $expiration->date);
//TODO figure out why this common log has to be here or this doesnt work
Common::log("expiration : ", $expiration);
Common::log("after : ", $expiration->date);

if($now > $expiration->date) $data['status'] = 14;

Common :: log是一个内部函数,只是执行print_r

static function log ($msg, $data=null)
{
    error_log ($msg . ($data ? print_r ($data, true) : ''));
}

该代码片段在终端中输出的内容(我正在查看最新版本的内容)如下所示。

[09-Jun-2015 17:03:19 America/Indiana/Indianapolis] before : 
[09-Jun-2015 17:03:19 America/Indiana/Indianapolis] expiration : DateTime Object
(
    [date] => 2015-06-09 06:16:55
    [timezone_type] => 3
    [timezone] => America/Indiana/Indianapolis
)
[09-Jun-2015 17:03:19 America/Indiana/Indianapolis] after : 2015-06-09 06:16:55

如果我只是注释掉或删除记录$expiration变量的那行,那么before :日志显示,$expiration->date计算为空字符串,我的逻辑在下面进行比较休息。在这里发生什么,为什么取出中间日志会对$expiration->date的价值产生影响?这是非常令人困惑的,我将不胜感激任何人都可以提供的任何帮助 - 我不想使用有效的代码,如果我不明白为什么它的工作原理。

1 个答案:

答案 0 :(得分:2)

说实话,我不确定为什么会这样。它可能与类构造函数有关。但是,没有关于以这种方式使用 - >日期的文档。所以,而不是做这样的事情:

Common::log("before : ", $expiration->date);

以这种方式做事:

Common::log("before : ", $expiration->format('y-m-d h:i:s'));

换句话说,您告诉PHP以您选择的输出格式显示日期(可能与您创建的输入格式不同)。