ホームページ > バックエンド開発 > PHPチュートリアル > PHP関数の値渡しとアドレス渡しの詳しい解説(参考)_PHPチュートリアル

PHP関数の値渡しとアドレス渡しの詳しい解説(参考)_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:49:37
オリジナル
915 人が閲覧しました

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 を返します;
}
$a = func(); //このメソッドの呼び出しでは参照渡しは行われません
$a =& func(); //この呼び出しは参照渡しです

コードは次のとおりです$a = 1;


PHP関数の値の転送の詳細

コードをコピー
関数 &func(&$a) {

$a を返します;
}
$b = func($a);
$c =& func($a);
$b = 2;
echo "a: $a、b: $b、c: $c.
/n";
// a: 1、b: 2、c: 1 を出力します
//$b の変更は $a に影響を与えないことがわかります
$c = 3;
echo "a: $a、b: $b、c: $c.
/n";
// a: 3、b: 2、c: 3 を出力します
//$c の変更が $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 for($j=$i+1;$j if($arr[$i]>$arr[$j]){
$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
for($j=$i+1;$j if($arr[$i]>$arr[$j]){
$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関数における値渡しとアドレス渡しの違いは何ですか?私は、プログラムのデモンストレーションを通じてこのような質問に対する答えを得るのが好きです。デモ録音を見てみましょう!

6) 関数アドレス転送後の変数$iの値:200
コードは次のとおりです コードをコピー

$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
説明:

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

tru​​ehttp://www.bkjia.com/PHPjc/632691.html

技術記事

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート