参照渡し、値渡しに知見のある方に質問です。
下記のようなコードを見たときに、
phpではオブジェクトは参照渡しがデフォルトなので、$array[] = clone $object
のような形で値渡ししてあげないと、期待値通りの挙動にならないことは理解しています。
処理の順番的に、
$object->name = 値 $object->price = 値
で、$objectが完成したタイミングで$arrayに代入しているので、cloneで値渡ししなくても $array には想定通りの値が入るのでは?と、ふと疑問に思いました。
基本的な参照渡し、値渡しの概念は理解できているのですが、ループ処理になったときに内部でどのような挙動が起きた結果、配列の最後の値しか反映されないのかが知りたいです。
こちらご存じの方いらっしゃいましたら、ご教示いただけますと幸いです。
php
1【期待値】 2array(3) { 3 [0]=> 4 object(stdClass)#2 (2) { 5 ["name"]=> 6 string(9) "アイス" 7 ["price"]=> 8 string(3) "100" 9 } 10 [1]=> 11 object(stdClass)#3 (2) { 12 ["name"]=> 13 string(12) "ジュース" 14 ["price"]=> 15 string(3) "150" 16 } 17 [2]=> 18 object(stdClass)#4 (2) { 19 ["name"]=> 20 string(9) "唐揚げ" 21 ["price"]=> 22 string(3) "400" 23 } 24}
php
1<?php 2 3$articles = [ 4 ['name' => 'アイス', 'price' => '100'], 5 ['name' => 'ジュース', 'price' => '150'], 6 ['name' => '唐揚げ', 'price' => '400'], 7]; 8 9$object = new stdClass(); 10 11$array = []; 12 13foreach ($articles as $article) { 14 $object->name = $article['name']; 15 $object->price = $article['price']; 16 $array[] = $object; 17} 18var_dump($array); 19exit; 20========================= 21array(3) { 22 [0]=> 23 object(stdClass)#1 (2) { 24 ["name"]=> 25 string(9) "唐揚げ" 26 ["price"]=> 27 string(3) "400" 28 } 29 [1]=> 30 object(stdClass)#1 (2) { 31 ["name"]=> 32 string(9) "唐揚げ" 33 ["price"]=> 34 string(3) "400" 35 } 36 [2]=> 37 object(stdClass)#1 (2) { 38 ["name"]=> 39 string(9) "唐揚げ" 40 ["price"]=> 41 string(3) "400" 42 } 43} 44=========================

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/13 14:51 編集
2022/07/13 14:47
2022/07/13 14:50