PHP5 において、次のように書いても、変数 $a が書き換えられることはありません
<?php $a = "A"; $ref = $a; $ref = "B"; echo $a;
結果: A
「&」を変数名の前につけると、その変数の別名(エイリアス)のような扱いになり、
別名の変数に加えた変更は元の変数にも影響するようになります。これを「参照渡し」といいます。
<?php $a = "A"; $ref = &$a; $ref = "B"; echo $a;
結果: B
オブジェクト型の場合は、この「参照渡し」が常に行われるので、何も指定しなくても結果が変化します
$obj = new stdClass(); $obj->a = "A"; $ref = $obj; $ref->a = "B"; echo $obj->a;
結果: B
オブジェクトのプロパティを代入した場合は、参照渡しが行われません。
$obj = new stdClass(); $obj->a = "A"; $ref = $obj->a; $ref = "B"; echo $obj->a;
結果: A
「&」を使えばこちらも同様に参照渡しとなります。
$obj = new stdClass(); $obj->a = "A"; $ref = &$obj->a; $ref = "B"; echo $obj->a;
結果: B
Similar Posts:
- [PHP]json_decode した stdClass Object を扱う
- [PHP]マスク画像で写真を好きな形に切り抜く(クリッピングマスク)
- [PHP]最低限覚えておきたい必須関数一覧
- [PHP]正規表現の全体一致は「^~$」だけでは不十分
- [PHP]ついやってしまいがちな汚いソース10種
- [PHP]switch()は通常では厳密に型を比較しない
- [PHP]ヒアドキュメント内で関数を使う
- [PHP]よくあるエラーメッセージの原因と対処法 1