PHP DateTime DateInterval在var_dump之后更改

时间:2017-08-24 22:28:48

标签: php datetime dateinterval

此对象中的任何变量都是!isset()但如果我是var_dump($ interval)或print_r($ interval),则这些变量将变为isset()。这也适用于empty()/!empty()。

所以在$ interval->下面的代码中,我最初是!isset()但是在我var_dump($ interval)之后的isset()。

$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和empty,但之后是isset和!空的?

2 个答案:

答案 0 :(得分:2)

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

在php的bug数据库中进行了一些搜索,看起来他们在7.0.5版中修复了它:

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

答案 1 :(得分:2)

我不确定您使用的是哪个版本的PHP但是使用PHP版本7.0.5。这是一个错误。

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