PHP では、値による関数の受け渡しは比較的簡単ですが、アドレスや参照による関数の受け渡しを理解できない人もいるかもしれません。次のエディターでは、PHP での値とアドレス (参照) による関数の受け渡しについて説明します。 、お役に立てば幸いです。
phpで引用された使用法:
1. 変数への参照代入: $a = &$b
2. 関数呼び出し時に参照パラメータを渡す
1) 初期の PHP では、参照型変数は呼び出し時に & シンボルを介して渡されました (例: func(&$arg);
)2) その後、関数の参照型パラメータは次のようにではなく、関数の宣言時に定義する必要があると規定されました: function func(&$arg);
注: 宣言時に参照型パラメータを定義した後参照、ランタイム参照パラメータの受け渡しは放棄されます。これを有効にするには、php.ini にallow_call_time_pass_referenceを追加する必要があります。
3. 関数は参照型を返します。このアプリケーション メソッドでは、関数を宣言するときに関数名の前に & 記号を追加する必要があり、呼び出し時に次のような参照割り当てメソッドを使用します。
コードをコピー | |
関数 &func() {
$a を返します; |
コードをコピー | |||||||||
関数 &func(&$a) {
$a を返します; |
コードは次のとおりです | コードをコピー |
//1. 基本的なデータ型の値の転送 /************************************************ **** */ 関数 testvar($k){ $k = 40; } $c = 30; //基本的なデータ型 (整数、ブール値、文字など) を関数パラメータに渡します。実際に渡されるのは値です ; テスト変数($c); echo $c;//結果は: 30 関数 testvar2(&$k){ $k = 40; } $e = 30; //基本的なデータ型 (整数、ブール値、文字など) を関数パラメータに渡します。実際、渡される y はアドレスです。 testvar2($e); echo $e;//結果は: 40 /************************************************ **** */ //2. 配列 (デフォルトでは、データのコピーがコピーされます)。アドレスを渡す場合は、&$arr. 。 $arr1 = 配列(-1,5,0); 関数 testArr($arr){ for($i=0;$i $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; } } } print_r($arr); //結果:配列 ( [0] => -1 [1] => 0 [2] => 5 ) } testArr($arr1); print_r($arr1); //結果:配列 ( [0] => -1 [1] => 5 [2] => 0 ) 関数 testArr2(&$arr){ for($i=0;$i $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; } } } } testArr($arr1); print_r($arr1); //結果:配列 ( [0] => -1 [1] => 0 [2] => 5 ) /************************************************ **** */ //3. オブジェクトのデータ型の値を渡す クラスの人{ パブリック $name; 公開 $age; } $a = 新しい人(); $a->name = 'シャオミン'; $a->年齢 = '20'; // a が格納する変数はオブジェクトのアドレスです。 a を変数 b に代入すると、実際にはアドレスが割り当てられます。 $b = $a; $b-> 年齢 = 30; //echo $a->age.$b->age;//結果は次のようになります: 30 30 //オブジェクトを関数パラメータに渡します。実際に渡されるのはオブジェクトのアドレスです。 機能テスト($k){ $k-> 年齢 = 40; } //電話 テスト($b); //echo $a->age.$b->age;//結果は次のようになります: 40 40 |
PHP関数における値渡しとアドレス渡しの違いは何ですか?私は、プログラムのデモンストレーションを通じてこのような質問に対する答えを得るのが好きです。デモ録音を見てみましょう!
コードは次のとおりです | コードをコピー |
$i=100; 関数 func($n){ $n=$n+100; $n を返します。 } echo '1) 関数が値を渡す前の変数 $i の値: '.$i.' '; echo '2) 値を渡した後の関数の戻り値:'.func($i).' '; echo '3) 関数が値を渡した後の変数 $i の値:'.$i.' '; echo '4) 関数アドレス転送前の変数 $i の値:'.$i.' '; echo '5) アドレスを渡した後の関数の戻り値:'.func(&$i).' '; echo '6) 関数アドレスが渡された後の変数 $i の値: '.$i.' '; //エコー関数($i).' ' ; ?> プログラム出力: 1) 関数が値を渡す前の変数 $i の値: 100 2) 値を渡した後の関数の戻り値: 200 3) 関数が値を渡した後の変数 $i の値: 100 4) 関数転送前の変数$iの値: 100 5) アドレスを渡した後の関数の戻り値: 200 |
6) 関数アドレス転送後の変数$iの値:200
1) 値 $i=100 が割り当てられた変数を直接出力します
2) func 関数は値を渡し、算術加算結果 $=100+100 を返します
3) func 関数が値を渡すとき、その動作範囲は関数内に限定され、外部変数 $i
には影響しません。
4) 同上
5) func 関数のパラメータの前に追加の「&」文字があり、アドレス転送を示します。2) と同様に、戻り値は関数の算術演算結果です。
6) func(&$i)、変数ポインタは $i の位置を指します。これは、変数 $i に対する演算として理解できます。この時点では、$i=$i+100 です。再割り当てされたことに相当します
上記のコードの 18 行目のコメントを削除すると、結果はどうなりますか?
概要: アドレスによる受け渡しは、関数の実行中に関数のパラメーター値を変更することですが、値による受け渡しは変更されることを期待していません。
http://www.bkjia.com/PHPjc/632691.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/632691.html技術記事