PHP 演算子 "&="アンパサンドイコールとは
例えば、以下のように関連するデータを全削除するとき
deleteAll()が成功していれば$resultsにtrueが入っている思っていましたが、integer 1が入っていました。
$results = true; $results &= $this->Work->deleteAll(array('dept_id' => $dept_id)); $results &= $this->Employee->deleteAll(array('dept_id' => $dept_id));
"&="アンパサンドイコールとは?
「ビット演算子」です。
"&=" は $a && $b ではなく、$a = $a & $b
を短くした書き方になります。
www.php.net
にあるように
&、| そして ^ 演算子の左右のオペランドが文字列の場合、その演算は、 文字列を構成する文字の ASCII 値を使って行います。その結果は文字列になります。 それ以外の場合は、左右のオペランドを integer に変換 し、結果も integer になります。
そのため、$resultにはintegerの"1"が入ります。
実行例
[~]$ php -a Interactive shell php > $result = true; php > var_dump($result); bool(true) php > php > $result &= true; php > var_dump($result); int(1)
数値ではなく、true, falseを入れたいのであれば
$results = true; $results = $results && $this->Work->deleteAll(array('dept_id' => $dept_id)); $results = $results && $this->Employee->deleteAll(array('dept_id' => $dept_id));
になります。
"=&"イコールアンパサンドは?
「参照渡し」です。
下記の2つはどちらも同じ挙動になります 。
$result =& $value; $result = &$value;
参照渡しとは
変数bに代入した後に変数aの値を変えたところ、変数bの値も変わります。
$a = 2; $b =& $a; // 変数aを&をつけて代入 $a = 10; // 変数aの値を変更 echo $b; # 結果 10