PHP DateTime DateInterval isset在var_dump后发生变化

PHP DateTime DateInterval isset在var_dump后发生变化

问题描述:

该对象中的任何变量都是!isset(),但如果我是var_dump($ interval)或print_r($ interval),则这些变量将变为isset()。这也适用于empty()/!empty()。因此,在下面的代码中,$ interval-> i最初是!isset(),但isset()是在var_dump($ interval)之后。PHP DateTime DateInterval isset在var_dump后发生变化

$future = new DateTime("2018-08-24"); 
$now = new DateTime(); 

$interval = $future->diff($now); 

if (isset($interval->i)) { 
    echo 'isset' . $interval->i; 
} else { 
    echo 'not isset' . $interval->i; 
} 

var_dump($interval); 

if (isset($interval->i)) { 
    echo 'isset' . $interval->i; 
} else { 
    echo 'not isset' . $interval->i; 
} 

什么可能导致这些!isset和空初始,但isset和!后空?

我能够重现相同的错误。你甚至可以用property_exists()替换isset()并获得相同的奇怪行为。

难道在PHP的bug数据库一点搜索,它看起来就像他们在7.0.5版修复它:

https://bugs.php.net/bug.php?id=69587

真不知道你正在使用的PHP版本,但使用PHP 7.0版。 5。它是一个错误。

这应该是有用的:https://bugs.php.net/bug.php?id=69587