2

私は次のコードスニペットを持っています:

$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)) {

しかし、私は本当に理由がわかりません:-)

説明ありがとうございます

4

2 に答える 2

3

これは演算子の優先順位の問題です。あなたの場合、 は の&&前に評価され=、説明したエラーにつながります。

この問題は、割り当てステートメントを括弧内に配置することで解決できます。

明示的に、あなたのコードは読むべきです

if(  (list($day, $month, $year) = explode('-', $active_from))
     && !checkdate($month, $day, $year)) {

if( $a=$b && $c )からに変更したことに注意してくださいif( ($a=$b) && $c )。かっこは、代入演算子 ( =) を論理積 ( ) の前に評価するように強制し&&ます。これは、必要なことです。

于 2013-01-01T22:44:20.080 に答える
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)) ) {
于 2013-01-01T22:44:18.340 に答える