<?php function e($t) { echo $t; return 1; } if (e('a') == 1) ; // a if (e('a') == 1 && e('b') == 1) ; // ab if (e('a') == 0 && e('b') == 1) ; // a if (e('a') == 1 && e('b') == 0) ; // ab if (e('a') == 1 && e('b') == 0 && e('c') == 1) ; // ab
結果(5.2.4にて)
aabaabab
なので、左から判定されている。
こういうこともできる
<?php class d { var $t; function d() { $this->t = 0; } function x() { echo $this->t; $this->t ++; return $this->t; } } $d = new d(); if($d->x() && $d->x() == 2) { echo 'ok'; }
当たり前といえば当たり前なんだけど、昔これが逆に判定される実装があった気がしたので(PHPじゃないですよ)、再確認。
でもあまりifで順序を考慮するコードって書かないほうがいい気がする。楽なんだけど。何となく。