nazolabo

フリーランスのWebエンジニアが近況や思ったことを発信しています。

if文の判定順序を確認する

<?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で順序を考慮するコードって書かないほうがいい気がする。楽なんだけど。何となく。