Re: [心得] 關於 未設定變數警告

看板PHP作者 (霸格尼尼)時間16年前 (2009/07/24 19:07), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《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
文章代碼(AID): #1AQPO3gr (PHP)
討論串 (同標題文章)
文章代碼(AID): #1AQPO3gr (PHP)