gpt4 book ai didi

php - DateInterval 属性和 isset()

转载 作者:可可西里 更新时间:2023-11-01 13:01:08 24 4
gpt4 key购买 nike

在运行一些测试时,注意到检查 DateInterval 对象的公共(public)属性会返回 false,即使它们包含数据。为什么这是/我们从文档中遗漏了什么?

例子:

$currentDate = new DateTime();
$targetDate = new DateTime('2015-03-05 11:11:11');
$interval = $currentDate->diff($targetDate);
var_dump($interval->y);
var_dump($interval->m);
var_dump(isset($interval->y));
var_dump(isset($interval->m));
var_dump($interval);

将给出以下输出:

int(0)
int(2)
bool(false)
bool(false)
object(DateInterval)#3 (15) {
["y"]=>
int(0)
["m"]=>
int(2)
["d"]=>
int(1)
["h"]=>
int(9)
["i"]=>
int(43)
["s"]=>
int(35)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(1)
["days"]=>
int(62)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}

最佳答案

这绝对很有趣。检查一下:

$currentDate = new DateTime();
$targetDate = new DateTime('2015-03-05 11:11:11');
$interval = $currentDate->diff($targetDate);
echo "<pre>";
//var_dump($interval); --> if you uncomment this line, it will work just fine
var_dump($interval->y);
var_dump($interval->m);
var_dump(isset($interval->y));
var_dump(isset($interval->m));

在调用 isset() 之前执行 var_dump($interval) 打印正确的结果!

object(DateInterval)#3 (15) {
["y"]=>
int(0)
["m"]=>
int(2)
["d"]=>
int(1)
["h"]=>
int(9)
["i"]=>
int(49)
["s"]=>
int(33)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(1)
["days"]=>
int(62)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}
int(0)
int(2)
bool(true)
bool(true)

我认为您一定真的偶然发现了该语言中的其中一个怪癖。我想不出任何与 var_dumpisset 或 PHP 的 OOP 实现相关的东西,都可能导致此行为。也许向 PHP 报告错误?

关于php - DateInterval 属性和 isset(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30084656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com