我繼承了一個(gè)代碼庫,在其中我發(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 ))我的問題是為什么當(dāng)前的迭代會(huì)對它的前任產(chǎn)生任何影響?PHP 版本:7.2編輯:如果問題看起來與 json 有關(guān),但事實(shí)并非如此,我深表歉意,相反,在我的代碼庫中,我有這些對象來自另一個(gè)稱為函數(shù)的對象。我使用 json_decode 只是為了說明問題
1 回答

當(dāng)年話下
TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
$m沒有明確定義。所以當(dāng) php 第一次遇到時(shí)$m,php 會(huì)創(chuàng)建這個(gè)變量。當(dāng)你有->符號(hào)時(shí),php 就會(huì)理解這是對象。所有其他迭代都只是使用同一個(gè)實(shí)例$m。
此外,啟用錯(cuò)誤報(bào)告后,您會(huì)看到警告:
警告:從空值創(chuàng)建默認(rèn)對象
而在 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)注
- 128 瀏覽
添加回答
舉報(bào)
0/150
提交
取消