[解決済み】PHPの配列は、値としてコピーされますか、それとも新しい変数への参照としてコピーされますか、そして関数に渡されたとき?
2022-04-01 01:46:49
質問
1) 配列をメソッドや関数の引数として渡す場合、参照渡しでしょうか、それとも値渡しでしょうか。
2) 配列を変数に代入するとき、新しい変数は元の配列への参照なのか、それとも新しいコピーなのでしょうか?
こうするとどうでしょう。
$a = array(1,2,3);
$b = $a;
は
$b
への参照です。
$a
?
解決方法は?
ご質問の後半部分については マニュアルの配列のページ には、次のように書かれています。 (引用) :
配列の代入には常に値が含まれます。 コピーすることができます。参照演算子を使って 配列を参照でコピーします。
そして、与えられた例.
<?php
$arr1 = array(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // $arr2 is changed,
// $arr1 is still array(2, 3)
$arr3 = &$arr1;
$arr3[] = 4; // now $arr1 and $arr3 are the same
?>
最初の部分については、試してみるのが一番です;-)
次のようなコード例を考えてみましょう。
function my_func($a) {
$a[] = 30;
}
$arr = array(10, 20);
my_func($arr);
var_dump($arr);
このように出力されます。
array
0 => int 10
1 => int 20
これは、関数がパラメータとして渡された配列の "outside" を変更していないことを示します:これはコピーとして渡され、参照ではありません。
もし、参照渡しにしたい場合は、このように関数を修正する必要があります。
function my_func(& $a) {
$a[] = 30;
}
そして、出力は次のようになります。
array
0 => int 10
1 => int 20
2 => int 30
今回は、配列が参照渡しされているので、quot;by reference"です。
を迷わず読んでください。
リファレンスの説明
のセクションを読んでみてください: いくつかの質問に答えてくれるはずです。)
関連
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】PHPからPythonスクリプトを実行する
-
[解決済み】file_get_contents( )が動作しない。
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] 配列を値でコピーする
-
[解決済み] PHPのstartWith()関数とendsWith()関数
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Fatal error: メンバ関数bind_param()のbooleanに対する呼び出し [重複] [重複
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】XAMPPエラー: www.example.com:443:0 サーバー証明書に、サーバー名と一致するIDが含まれていません。
-
[解決済み】PHPの予期しないT_VARIABLEとは何ですか?
-
[解決済み] 入力ファイルが指定されていない
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
[解決済み] mysqli_fetch_assoc() は、パラメータ 1 が mysqli_result であることを期待し、boolean が与えられる [重複] 。
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。
-
[解決済み] PHPの配列を別の配列にコピーする関数はありますか?
-
[解決済み】PHPの変数は値で渡されるのか、それとも参照で渡されるのか?