php
1 function func(&$num) 2 { 3 return $num; 4 } 5 6 $ex = 5; 7 $go = func($ex); 8 echo $go;
なぜこのように参照する必要があるのでしょうか?
&なしでもいいと思うのですが、利点は何でしょうか?

Q&A
2回答
1479閲覧
退会済みユーザー
総合スコア0
PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。
0グッド
0クリップ
投稿2015/12/14 07:21
php
1 function func(&$num) 2 { 3 return $num; 4 } 5 6 $ex = 5; 7 $go = func($ex); 8 echo $go;
なぜこのように参照する必要があるのでしょうか?
&なしでもいいと思うのですが、利点は何でしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
php
1function func(&$num) 2 { 3 return $num; 4 }
この例ですと確かに、参照渡しである意味はありません。
参照渡しと値渡しで意味合いが変わってくるのは、関数内で引数を変化させた時です。
例えばhyper-drums-ko様の回答の上部分では、「引数$argに1を足す」という処理が入っています。
この時、値渡し hoge($arg) では関数の外で定義した$value1の値が1のままであるのに対し、
参照渡し fuga(&$arg) では関数の外で定義したはずの$value2の値が「$arg++;」の影響を受けて、2になっています。
これらをどう使い分けるかは、プログラミングの方針とかによるのだと思います。
投稿2016/01/07 17:36
総合スコア51
0
& を付けるとリファレンス渡しとなり、関数内で引数の値を変更することができます。
PHP
1function hoge($arg) 2{ 3 $arg++; 4 return $arg; 5} 6 7function fuga(&$arg) 8{ 9 $arg++; 10 return $arg; 11} 12 13$value1 = 1; 14echo hoge($value1); 15-> 2 16echo $value1; 17-> 1 18 19$value2 = 1; 20echo fuga($value2); 21-> 2 22echo $value2; 23-> 2 24
私はこんな感じでよく使います。
PHP
1$itemList = array( 2 array( 3 'name' => 'apple', 4 'price' => 30 5 ), 6 array( 7 'name' => 'banana', 8 'price' => 50 9 ), 10 array( 11 'name' => 'melon', 12 'price' => 5000 13 ) 14); 15 16foreach ($itemList as &$item) { 17 $item['is_cheap'] = $item['price'] < 1000; 18} 19 20print_r($itemList); 21-> array( 22 array( 23 'name' => 'apple', 24 'price' => 30, 25 'is_cheap' => true 26 ), 27 array( 28 'name' => 'banana', 29 'price' => 50, 30 'is_cheap' => true 31 ), 32 array( 33 'name' => 'melon', 34 'price' => 5000, 35 'is_cheap' => false 36 ) 37 )
投稿2015/12/14 07:33
編集2015/12/14 07:41総合スコア736
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。