Hello, World!!

むずかしいことはかけません

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

参考サイト

PHPで”=&"演算子と"&="演算子は何を意味しますか?

PHP 参照渡しまとめ - Qiita

【PHP超入門】参照(リファレンス)の代入について - Qiita