PHP 関数 配列の参照渡し
達人様、「PHP 初心者から達人まで」で、配列変数を参照渡しと言いますが、配列の最初の要素のアドレスだけが渡されます。したがって、関数を終了した後は、最初の要素に対する変更のみが有効になります。次のコードを見てください。配列全体のすべての要素が変更されています。なぜ?
/**
* @author blog.anchen8.net
* @copyright 2015
*/
// 参照によってパラメータをテスト送信する
function changeName(&$name )
{
$name='Xiao HuiHui';
}
$girl='Mo';
echo '
関数を呼び出す前の私の名前は:' でした。 $girl;
changeName($girl);
echo'
関数を呼び出した後の私の名前は '.$girl;
// テスト配列パラメータを参照で送信します
function addPrice(&$price)
{
$price[0] =20;
$price[1] =30;
$price [2] =25;
}
関数discount(&$price)
{
foreach ($price as $key=> $aa)
{
$aa*=.8;
$price[$key]*=.8;
}
}
関数priceSet(&$price)
{
$価格[0]=20;
$price[1]=30;
$price[2]=25;
}
echo '
';
$price_a=array(100,29,30);
echo'
割引前の価格は ';
var_dump($price_a);
割引($price_a);
echo '
割引後の価格は ';
var_dump($price_a);
$price_a=array(100,29,30) ;
addPrice($price_a);
echo '
追加後の価格は ';
var_dump($price_a);
$price_a=array(100) ,29,30);
priceSet($price_a);
echo '
設定後の価格は ';
var_dump($price_a);
echo '
';
function setInfo (&$people)
{
$people['name']='MoMomo';
$people['age']=20;
$people['hobby']='読書';
}
$gril=array('name'=>'Xiao Mo MO','age'=>18,'hobby'= >'Studing');
関数を呼び出す前に '
をエコーし、値は ';
var_dump($gril);
setInfo($gril);
echo '
関数を呼び出した後の配列の値は ';
var_dump($gril);
?>
実行結果:
関数、私の名前は: Mo
関数を呼び出した後の私の名前は: Xiao HuiHui
割引前の価格は array(3) { [0]=> (100) [1]=> int(29) [2]=> int(30) }
割引後の価格は array(3) { [0]=> [1]=> float(23.2) [2]=> float(24) }
追加後の価格は array(3) { [0]=> => int(59) [2]=> int(55) }
設定後の価格は array(3) { [0]=> int(20) [1]=> int(30) [2]=> int(25) }
関数を呼び出す前の値は array(3) { ["name"]=> Xiao Mo MO" ["age"]=> int(18) ["hobby"]=> string(7) "勉強" }
関数を呼び出した後、配列の値はarray(3) ) { ["名前"]=> string(6) "モモ" ["年齢"]=> int(20) ["趣味"]=> string(7) "読書" }
------解決策----------------------
作者はそれが当たり前だと思っていませんか?
このような学問的態度で書かれた本を読んでもいいでしょうか?
------ソリューションのアイデア----------------------
「初心者からマスターまでの PHP」 、配列変数を参照によって渡す場合、配列の最初の要素のアドレスのみが渡されます。 そのため、関数を終了した後は、最初の要素への変更のみが有効になります。
赤い部分は明らかに間違っています。
本を読んだ後、実践して検証してください。