[PHP]変数、オブジェクトの参照渡しについて

Facebook にシェア
Delicious にシェア
LINEで送る
Pocket

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:




  • This entry was posted in PHP and tagged . Bookmark the permalink.

    One Response to [PHP]変数、オブジェクトの参照渡しについて

    1. Pingback: [PHP]ユーザー定義関数の出力結果を任意の変数に格納する | PHP Archive

    コメントを残す

    メールアドレスが公開されることはありません。