[心得] 關於 未設定變數警告
PHP 的超彈性帶來優點,當然也帶來危險
比如,變數未定義即可使用
萬一因為打字錯誤造成新變數
不像一些 compile 語言容易被揪出來
因為這個原因,我們沒關掉警告,我也儘量少用 @符號去覆蓋警告訊息
今天被發一個 BUG,查了很久,實在無法複製,才發現這警告也很有限
BUG 的形容是:初始化一個新帳號,會有未設定變數警告
因為產生新帳號有些限制(就當做是資源有限,或每個新帳號都要寫公文麻煩別人好了)
所以身為 RD,我用了些小技巧:我把舊帳號讀出來,並且 unset 其下相關變數
<?php
$dev['conf'] = array();
unset($dev['conf']); // 我以為這樣 unset,就可以偽造新帳號
$data = &$dev['conf'];
$dev['name'] = $data['basic']['name']; // err
var_dump($dev);
?>
如上,是我把整個程式抽出必要部份來測試
上面是不會有錯誤訊息的!!
但 QA 給的錯誤訊息是在我註解 err 那行會警告 Notice: Undefined index: basic
最後我只好硬在那行加 @ 覆蓋,不明所以..
事實上,把 unset 那行拿掉,錯誤訊息反而會出來,太詭異了
但我不能這樣做,因為第一行事實上在原程式裏是有一堆資料
比如是
$dev['conf'] = read_data();
所以我才有必要以 unset 去偽造新帳號
最後我怎麼重製問題的?(我當然可以硬解啦,但沒找到問題就宣稱已解掉問題,很無力)
只好去求人家發給我一個新帳號,以確認問題
然後我才驚覺:原來 unset 是不足以模擬一個新帳號的!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.219.65.16
→
07/24 17:20, , 1F
07/24 17:20, 1F
推
07/24 17:23, , 2F
07/24 17:23, 2F
→
07/24 17:29, , 3F
07/24 17:29, 3F
→
07/24 17:29, , 4F
07/24 17:29, 4F
推
07/24 17:48, , 5F
07/24 17:48, 5F
推
07/24 18:35, , 6F
07/24 18:35, 6F
→
07/24 18:35, , 7F
07/24 18:35, 7F
→
07/24 19:43, , 8F
07/24 19:43, 8F
→
07/24 19:44, , 9F
07/24 19:44, 9F
→
07/24 19:44, , 10F
07/24 19:44, 10F
→
07/24 19:45, , 11F
07/24 19:45, 11F
→
07/24 19:45, , 12F
07/24 19:45, 12F
→
07/24 19:45, , 13F
07/24 19:45, 13F
推
07/24 19:48, , 14F
07/24 19:48, 14F
→
07/24 20:00, , 15F
07/24 20:00, 15F
→
07/24 20:01, , 16F
07/24 20:01, 16F
→
07/24 20:02, , 17F
07/24 20:02, 17F
→
07/24 20:03, , 18F
07/24 20:03, 18F
→
07/24 20:04, , 19F
07/24 20:04, 19F
→
07/24 20:04, , 20F
07/24 20:04, 20F
討論串 (同標題文章)