在运行一些测试并注意到检查DateInterval对象上的公共属性时,即使它们包含数据,也会返回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)
}
发布于 2015-05-06 18:36:20
这绝对是有趣的。看看这个:
$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));
在调用var_dump($interval)
之前执行isset()
打印正确的结果!
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_dump
、isset
或PHP实现相关的任何东西,我都无法想象,这会导致这种行为。也许是PHP的bug报告?
https://stackoverflow.com/questions/30084656
复制相似问题