ホームページ  >  記事  >  バックエンド開発  >  PHPの配列は参照型ですか?

PHPの配列は参照型ですか?

青灯夜游
青灯夜游オリジナル
2022-09-20 19:08:592035ブラウズ

php 配列は参照型ではなく値型です。配列が割り当てられると別の変数 (コピー) が作成されるため、別の変数を変更しても配列自体には影響しません。そして、PHP 配列転送は値転送です。関数を呼び出すときに、PHP 配列を実パラメータとして仮パラメータに代入し、関数内で変更しても配列自体には影響しません。これは、このプロセスでの転送が値転送であることを示します。配列変数はそうではなく、この配列自体への参照です。

PHPの配列は参照型ですか?

このチュートリアルの動作環境: Windows7 システム、PHP バージョン 8.1、DELL G3 コンピューター

PHP では、ほとんどの変数の型が文字列、整数、浮動小数点、配列などは値型ですが、クラスやオブジェクトは参照型なので使用する際には注意が必要です。

PHP の変数はこのようにメモリに保存されますが、変数に保存されるのは値の内容ではなく、アドレスです。例:

$a = 1;

変数 $a には値 1 が直接格納されているように見えます。実際の状況では、PHP インタープリターは変数 $a を作成し、値 1 をメモリのどこかに保存し、その値のアドレスを変数 $a に保存します。

値を取得する必要がある場合は、まず変数 $a のアドレスを見つけて、次にそのアドレスに基づいて変数の値を見つけます。

ルックダウン:

echo $a;

は 1 を出力します。PHP インタープリターは、このコードを次のように完成させます: $a に格納されているアドレスを検索し、それに基づいてメモリ内のどこかに格納されている値を検索します。アドレスを画面に出力します。

単純なコード行のように見えますが、プロセスは次のとおりです。

さらに下を見てください:

$a = 1;
$b = &$a;

ここの変数 $b は興味深い演算を実行します。& 記号は、$a 変数に格納されているアドレスを取り出し、それを $b 変数に格納します。

次に、次のコードを使用すると:

echo $b;

結果も 1 と出力されます。PHP インタープリターは、まず $b に格納されているアドレスを取り出し、次に、それに基づいて値を見つけます。住所・アドレス。次の操作を実行すると:

$a = 2;
echo $b; //输出2

$a の値が変更されると、$b も変更されることがわかります。実際には、逆に、$b の値が変更されると、それに応じて $a の値も変更されます。

この時点で、変数 $a と $b が同じアドレスを格納し、同じ値を指していることが確認できます。

したがって、これらは同じ変数を表していると結論付けることができます。

さらに要約すると、2 つの変数に同じアドレスが格納されている場合、それらは同じ変数であると結論付けることができます。

いくつかの内容を理解した後、値の型と参照型の紹介を開始します。

最初に次のコードを見てみましょう:

$a = 1;
$b = $a;
$a = 2;
echo $b; //输出 1

$a の値を $b に割り当てます。$a の値を変更した後、$b の値は変更されません。つまり、$a と $b が異なるアドレスを指す 2 つの異なる変数であるとします。さまざまな変数を作成するこの形式の代入は、値型と呼ばれます。

もう一度見てください:

class User{
 public $name = ‘Tome‘;
}
$a = new User;
$b = $a;
$a->name = ‘Jim‘;
echo $b->name; //输出 Jim

同様に、$a の値を $b に代入します。$a を変更すると、$b も変更されます。つまり、$a と $b は同じになります。同じアドレスを指す変数。新しい変数を作成しないこの形式の代入は、参照型と呼ばれます。

php 配列値の型

PHP で渡す配列は、参照ではなく値によって渡されます。

関数を呼び出すときは、PHP 配列を実パラメータとして仮パラメータに割り当てます。関数内でそれを変更しても、配列自体には影響しません。

このプロセスでの転送は値によるものであることを説明してください。配列変数は配列自体への参照ではありません。PHP 配列自体は値の形式で存在し、仮パラメータは配列。

これは他の言語 (C、Js など) とは大きく異なるため、注目に値します。

例は次のとおりです:

$arr = array(
    'name' => 'corn',
    'age' => '24',
);
test_arr($arr);
function test_arr($arr){
    $arr['name'] = 'qqyumidi';
}
print_r($arr); //result: Array ( [name] => corn [age] => 24 )

js コードは次のとおりです:

var arr = new Array('corn', '24');
test_arr(arr);
function test_arr(arr){
    arr[0] = 'qqyumidi';
}
console.log(arr);  //result:["qqyumidi", "24"]

PHP での値の受け渡しに参照受け渡し効果を使用する必要がある場合は、仮パラメータの前にアドレス文字 & を追加できます。

$aa = 100;
test_vars($aa);
function test_vars(&$aa){
    $aa = 200;
}
print_r($aa);   //result: 200

推奨学習: 「PHP ビデオ チュートリアル

以上がPHPの配列は参照型ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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