33
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPの参照について

Posted at

参考: PHPの参照渡しは関数の引数だけじゃない - cloned.log

ポイントは3つ。

  • 関数/メソド引数の参照渡し
  • 代入の参照代入
  • 関数/メソドの参照返し

##引数の参照渡し
 個人的にはこれもよく忘れるのです。仮引数に&か実引数に&か非常にややこしい気がする。

$v = "default";
rewrite($v);
print $v;

function rewrite(&$arg) {
    $arg = "HelloWorld";
}

関数/メソドの参照返し

 この辺は動的プログラミングとかで地味に効いてくる。

$hoge = "this is hoge";

function &fuga() {
    return $this->value;
}

$fuga =& fuga();
$fuga = "this is fuga";
var_dump($hoge);//"this is fuga";

 関数名と返り値取得の両方に&が必要、との事。クラスで可変となるプロパティ部にアクセサつけたりとかそういう感じの時何かと便利。

 受け取るときに&抜いたら参照じゃなくなる辺りとかも便利だと思う。

参照渡し

 最後に、参照を代入で渡すこともできる。が、まぁあんまり使うことはないとは思う。

$hoge = "this is hoge";
$fuga =& $hoge;
$fuga = "this is fuga";
var_dump($fuga);

 ちなみにforeachとかも参照で受け取れる。渡した値を変更する時、とか$arr[$key]ってすること多そうだけど、アレだと$value側が浮く。それだけの為にわざわざarray_keysとか使うのもあれだしねぇ

foreach($arr as $key=>&$value)
{
    $value = "new value";
    //$arr[$key] = "new value"; // これだと$valueが浮く
}

33
36
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?