我有以下代码snipplet:
$active_from = '31-12-2009';
if(list($day, $month, $year) = explode('-', $active_from)
&& !checkdate($month, $day, $year)) {
echo 'test';
}
为什么我会收到未定义的变量错误?
list($day, $month, $year) = explode('-', $active_from)
会返回true
,因此评估list()
,不是吗?我认为,应该定义变量?我该怎么监督?
这在我看来同样如此并且没有错误:
$active_from = '31-12-2009';
list($day, $month, $year) = explode('-', $active_from);
if(checkdate($month, $day, $year)) {
echo 'test';
}
这不会引起任何错误:
if((list($day, $month, $year) = explode('-', $active_from)) && checkdate($month, $day, $year)) {
但我真的不明白为什么: - )
感谢您的解释
答案 0 :(得分:3)
这是operator precedence的问题,在您的情况下,&&
会在=
之前进行评估,从而导致您所描述的错误。
您可以通过将赋值语句放在括号内来解决此问题。
明确地,您的代码应该是
if( (list($day, $month, $year) = explode('-', $active_from))
&& !checkdate($month, $day, $year)) {
请注意,我已将其从if( $a=$b && $c )
更改为if( ($a=$b) && $c )
。括号强制赋值运算符(=
)在连词(&&
)之前进行评估,这就是你想要的。
答案 1 :(得分:1)
if ( list($day, $month, $year) = explode('-', $active_from) && !checkdate($month, $day, $year) ) {
与
相同if ( list($day, $month, $year) = (explode('-', $active_from) && !checkdate($month, $day, $year)) ) {