我繼承了一個(gè)代碼庫(kù),在其中我發(fā)現(xiàn)了一些精煉和“煮沸”的版本,如下所示$json = '[ {"id": 1, "val":"apple"}, {"id": 2, "val":"mango"} ]';$data = json_decode($json);$arr = [];foreach($data as $d){ $m->id = $d->id; $m->val = $d->val; $arr[] = $m;}print_r($arr);結(jié)果Array( [0] => stdClass Object ( [id] => 2 [val] => mango ) [1] => stdClass Object ( [id] => 2 [val] => mango ))我的問(wèn)題是為什么當(dāng)前的迭代會(huì)對(duì)它的前任產(chǎn)生任何影響?PHP 版本:7.2編輯:如果問(wèn)題看起來(lái)與 json 有關(guān),但事實(shí)并非如此,我深表歉意,相反,在我的代碼庫(kù)中,我有這些對(duì)象來(lái)自另一個(gè)稱為函數(shù)的對(duì)象。我使用 json_decode 只是為了說(shuō)明問(wèn)題
1 回答

當(dāng)年話下
TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
$m沒(méi)有明確定義。所以當(dāng) php 第一次遇到時(shí)$m,php 會(huì)創(chuàng)建這個(gè)變量。當(dāng)你有->符號(hào)時(shí),php 就會(huì)理解這是對(duì)象。所有其他迭代都只是使用同一個(gè)實(shí)例$m。
此外,啟用錯(cuò)誤報(bào)告后,您會(huì)看到警告:
警告:從空值創(chuàng)建默認(rèn)對(duì)象
而在 php8 中你會(huì)得到一個(gè)致命錯(cuò)誤。
解決方案:
foreach($data as $d){
// explicitly define $m
$m = new stdClass;
$m->id = $d->id;
$m->val = $d->val;
$arr[] = $m;
}
- 1 回答
- 0 關(guān)注
- 108 瀏覽
添加回答
舉報(bào)
0/150
提交
取消