Re: [心得] 關於 未設定變數警告
※ 引述《HuangJC (吹笛牧童)》之銘言:
: 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 是不足以模擬一個新帳號的!!
有點難懂
我想 你的意思是 有['conf']的是舊帳號 沒有的是新帳號?
如果區分新舊帳號的判定規則是這樣的話 那unset就可以偽造新帳號
反之則否
程式是你們家的人寫的 所以這個問題應該問施主你自己
再者
前面unset掉了 後面當然沒有basic這個index
難不成你們是
$dev['name'] = $data['basic']['name'];
if(empty($dev['name'])){
//old account
}else{
//new account
}
這樣判斷新舊帳號!?
如果你是用
if(isset($data['basic']))來判斷就不會看到NOTICE
--
國愛‧主民‧學科‧康健‧道人
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.231.23
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章