値渡しと参照渡しの違いを5つのPHP例で詳しく解説_PHPチュートリアル

WBOY
リリース: 2016-07-21 15:16:59
オリジナル
794 人が閲覧しました

笑、使い方を知るのはまだ初期段階にすぎません。それをより良く使用するには、その原理を理解する必要があります。これ以上苦労せずに、実際のパラメータの値を行パラメータに代入します。行パラメーターの変更は実際のパラメーターの値には影響しません
参照による受け渡し: パラメーターが実際にアドレスによって渡された後、行パラメーターと実際のパラメーターは同じオブジェクトになりますが、それらの名前は異なります。行パラメータは実際のパラメータの値に影響します
説明:
値渡し: ルート コピーは同じです。たとえば、私は家を持っていますが、あなたが私とまったく同じ家を建てても、私が家で何をしても私には影響しません。あなたに影響を与えますが、それらは互いに独立しています。
パスリファレンス: 大学時代にC言語で学んだポインタを思い出します。ほぼ同じ感じです。たとえば、私は家を持っています。私があなたに鍵を渡せば、あなたが家の中で何をしても私に影響を及ぼします。
1 変数 2
$param2 = $param1; //変数 1 を変数 2 に代入 echo $param2; //1 として表示

2、コードをコピー

$param2=1; //変数 2 を定義
$param1 = &$param2; //変数 2 の参照を変数 1 に渡す
echo $param2; 1
$param1 = 2; //変数 1 に 2 を代入します
echo $param2; //2


3 として表示され、関数はコードをコピーします
以下のように:

//値を渡す$param1 = 1; //変数1を定義する function add($param2) //パラメータを渡す{
$param2=3;変数 2
}
$param3=add ($param1); // add メソッドを呼び出し、変数 1 を変数 2 に渡します
echo '
$param1=='.$param1.'
'; // $param1== 1 として表示されます
echo '
$param2=='.$param2.'
'; // $param2== として表示されます $param2 はローカル変数であるため、グローバル
echo に影響を与える '
$param3=='.$param3.'
'; //$param3== と表示されるため、add メソッドには戻り値がないため、$param3 は空です
?> ;


4、参照渡し関数


コードをコピーします コードは次のとおりです:
//値を渡す
$param1 = 1; // 変数 1 を定義します。 add(&$param2) //パラメータを渡す
{
$param2= 3; //変数 2 に 3 を代入
// return $param2; //変数 2 を返す
}
echo '
$param1== '.$param1.'
'; //表示 $param1==1 のため、変数 1 に対して演算は実行されません
$param3=add($param1); //add メソッドを呼び出し、次の参照を渡します。変数 1 から変数 2 へ
echo '
$param1==' .$param1.'
'; //$param1==3 として表示されます。変数の呼び出しプロセス中に、$param2 の変更が影響します。戻り値はありませんが、変数 1
echo '
$param2=='.$ param2.'
'; //$param2== と表示されます $param2 はローカル変数であるため、影響を与えることはできません世界情勢
echo '
$param3=='.$param3.'
'; //メソッド内のreturnコメントを削除すると$param3==と表示されます=3
?>

5、関数パス参照 2

コードをコピーします コードは次のとおりです:

// 参照を渡します
$param1 = 1;
function &add(&$param2)
{
$param2 = 2;
$param3=&add($param1);
$param4=add($param1);
echo '
$param3=='.$param3.'
' // $param3==2
echo '
$ として表示されますparam4=='.$param4.'
'; //$param4==2 として表示されます
echo '
$param1=='.$param1.'
'; $param1==2 の変数を呼び出すプロセス中に、$param2 の変更は変数 1 に影響します
$param3++;
/*以下では $param1==3 と表示されます。これは、$param2 と $param1 が参照しているためです。同じ場所です
* 戻り値の前にアドレス記号が追加されていても、参照です $param3=&add($param1);
* このように、$param3、$param2、$param1 は、 $param3++; の場合、
* $param1 が変更されます* /
echo '
$param1=='.$param1.'
';
$param4++; $param1==3. なぜ 4 ではなく 3 なのでしょうか? 戻り値の前に
* アドレス記号がないため、$param4 が変更されても $param1*/
には影響しません。 echo '
$param1=='.$param1.'

?>


ははは、参照を渡す方が良いと思いますし、リソースの消費も少なくなります。上記のテストでは明らかな差はありませんが、これはテスト データが十分に大きくないためと考えられます。テストするデータがさらにあれば、大きな差が生じると思います。

http://www.bkjia.com/PHPjc/325762.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/325762.html技術記事笑、これを使用する方法を知るのはまだ初期段階にすぎません。それをより良く使用するには、原理を理解する必要があります。これにより、実際のパラメータの値が行パラメータに割り当てられます。したがって、行パラメータの変更は行われません...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!