配列を参照で渡すPHP関数

WBOY
WBOYオリジナル
2016-06-20 12:59:261866ブラウズ

達人の皆さん、「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)
{
$price[0]=20;
$price[2]=25;

echo '

';

$price_a=array(100,29,30);

割引前の価格は ';
var_dump($price_a); 🎜>discount($price_a);

echo '

割引後の価格は ';

$price_a=array ,30);
addPrice($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','age'=>18,'趣味'=>
関数を呼び出す前にエコー ';
var_dump($gril);
echo '

関数を呼び出した後、配列の値は ';

?> 実行結果:
関数を呼び出す前の私の名前は: Mo

関数を呼び出した後の私の名前は: Xiao HuiHui


割引前の価格は array(3) { [0]= > int(100) [1]=> int(29) [2]=> int(30) }

割引後の価格は array(3) { [0]=> (80) [1]=> float(23.2) [2]=> float(24) }

追加後の価格は array(3) { [0]=> int; [1]=> int(59) [2]=> int(55) }

設定後の価格は array(3) { [0]=> int(20) => int(30) [2]=> int(25) }


関数を呼び出す前、値は array(3) { ["name"]=> 10) "Xiao Mo MO" ["age"]=> int(18) ["hobby"]=> string(7) "勉強中" }

関数を呼び出した後の配列の値はarray(3) { ["name"]=> string(6) "MoMomo" ["age"]=> int(20) ["hobby"]=> string(7) "読書" }



ディスカッション (解決策) への返信

CSDN は優れた方法です。小さな新人がアドバイスを求めています。

著者はそれを当然だと思っていませんか?
このような学術的態度で書かれた本を読んでもいいでしょうか?

モデレータは同様の PHP 学習本をいくつか推奨しています。ありがとう。

『PHP 初心者から達人まで』では、配列変数を参照渡しする場合、配列の最初の要素のアドレスのみが渡されます。 したがって、関数を終了した後は、最初の要素に対する変更のみが有効になります。
着色部分は明らかに赤いです。

読んでみてください?、??、??。

ありがとうございます。
その本はとても間違っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。