php - 为什么 DateTime 对象在我执行空操作之前不可用?

标签 php wordpress datetime

<分区>

我是 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,
//   'warning_count' => 0,
//   'warnings' => array(
//
//   ),
//   '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 对象?

我最好的猜测是:

  1. 当在 json_encode() 中使用 $datetime 对象时会发生某种活跃情况,而在访问属性时不会发生这种情况,

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

最佳答案

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

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

解决方案显然是按照我所做的(无操作)或进行特定的字符串格式化,即使您希望它们采用的格式是默认的 ->date 格式。

关于php - 为什么 DateTime 对象在我执行空操作之前不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40899042/

相关文章:

php - 如何在 laravel pivot 模型上调用函数

php - 使用 jquery 解析 php 脚本返回的 JSON 字符串

php - 简单的 WordPress 循环结果完全错误并且充满了中断和 <p> 元素

jquery - 跟踪与 Google Analytics、Gravity 表单和 jQuery 的表单交互

php - 在 woocommerce 中回显产品标题

mysql - 如何修复截断的错误日期时间值 : 'Apr 25, 2017 11:48:45 AM' error during insert?

asp.net-mvc - 在 Azure WebRole 中将 UTC 转换为本地时区

php - 根据月相显示图像

javascript - 如何根据所选选项的 id 显示/隐藏 div?

datetime - 如何在 TypeScript 中从日期中减去天数