php – 为什么在我执行no-op之前DateTime对象不可用?

参见英文答案 > Why can’t I access DateTime->date in PHP’s DateTime class? Is it a bug?                                    4个
我是PHP的新手.以下错误(?)花了我891723498小时来查找我的代码.有人可以向我解释是什么导致这种情况,也许是一种解决方法吗?现在我刚刚离开json_encode()调用.

这是我的代码的简化版本.可能还有其他函数json_encode()具有相同的效果,我不知道.

这是我的repl的直接复制粘贴(使用Boris PHP repl – https://github.com/borisrepl/boris).

./bin/boris
[1] boris> function broken () {
[1]     *>   $timezone = new DateTimeZone("America/New_York");
[1]     *>   $datetime = new DateTime("Now",$timezone);
[1]     *>   return date_parse($datetime->date);
[1]     *> }
// NULL
[2] boris>
[2]     *> function works () {
[2]     *>   $timezone = new DateTimeZone("America/New_York");
[2]     *>   $datetime = new DateTime("Now",$timezone);
[2]     *>   json_encode($datetime);
[2]     *>   return date_parse($datetime->date);
[2]     *> }
// NULL
[3] boris> broken();
PHP Notice:  Undefined property: DateTime::$date in /home/sirrobert/Projects/sirrobert/archon/code/repl/boris/lib/Boris/EvalWorker.PHP(152) : eval()'d code on line 4
// array(
//   'year' => false,//   'month' => false,//   'day' => false,//   'hour' => false,//   'minute' => false,//   'second' => false,//   'fraction' => false,//   'warning_count' => 0,//   'warnings' => array(
//
//   ),//   'error_count' => 1,//   'errors' => array(
//     0 => 'Empty string'
//   ),//   'is_localtime' => false
// )
[4] boris> works();
// array(
//   'year' => 2016,//   'month' => 11,//   'day' => 30,//   'hour' => 16,//   'minute' => 53,//   'second' => 35,//   'fraction' => 0.0,//   'error_count' => 0,//   'errors' => array(
//
//   ),//   'is_localtime' => false
// )
[5] boris>

这是来自PHP -a repl的同样的东西,输出的帮助较少.

PHP > function broken () {
PHP {   $timezone = new DateTimeZone("America/New_York");
PHP {   $datetime = new DateTime("Now",$timezone);
PHP {   return date_parse($datetime->date);
PHP { }
PHP >
PHP > function works () {
PHP {   $timezone = new DateTimeZone("America/New_York");
PHP {   $datetime = new DateTime("Now",$timezone);
PHP {   json_encode($datetime);
PHP {   return date_parse($datetime->date);
PHP { }
PHP >
PHP > broken()
PHP > ;
PHP Notice:  Undefined property: DateTime::$date in PHP shell code on line 4
PHP > works();
PHP >

为什么世界上json_encode($datetime)“实现”$datetime对象?

我最好的猜测是:

>当json_encode()中使用$datetime对象时,某些类型的活动正在发生,而不是在为属性访问它时

要么

>我在并行化的内部代码中遇到某种竞争条件?

解决方法

好的,根据提供的评论链接,看起来这是一个已知的(但没有优先级)问题,每 http://bugs.php.net/bug.php?id=49382Why can’t I access DateTime->date in PHP’s DateTime class? Is it a bug?

问题似乎是延迟加载DateTime类,通过直接访问对象的属性显然没有正确触发.

解决方案显然是做我做的(无操作)或做特定的字符串格式化,即使你想要的格式是认的 – >日期格式.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...