加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 22:27:22 所属栏目:PHP教程 来源:网络整理
导读:参见英文答案 Why can’t I access DateTime-date in PHP’s DateTime class? Is it a bug?????????????????????????????????????4个 我是PHP的新手.以下错误(?)花了我891723498小时来查找我的代码.有人可以向我解释是什么导致这种情况,也许是一种解决方法
参见英文答案 > 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=49382和 Why can’t I access DateTime->date in PHP’s DateTime class? Is it a bug?

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读