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

看板PHP作者 (吹笛牧童)時間15年前 (2009/07/24 16:53), 編輯推噓4(4016)
留言20則, 7人參與, 最新討論串1/4 (看更多)
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
看不懂+1
07/24 17:23, 2F

07/24 17:29, , 3F
看不懂+1 我覺得你都會弄出一堆,大家平時看不到的
07/24 17:29, 3F

07/24 17:29, , 4F
問題 ............
07/24 17:29, 4F

07/24 17:48, , 5F
看不懂+1
07/24 17:48, 5F

07/24 18:35, , 6F
不是unset不足以模擬,而是你的寫法實在是太危險,會出
07/24 18:35, 6F

07/24 18:35, , 7F
什麼包無法預料.
07/24 18:35, 7F

07/24 19:43, , 8F
我們知道,PHP 對於 0 和 真正的 unset 是有差別的
07/24 19:43, 8F

07/24 19:44, , 9F
今天就是有要求'新帳號要有 default 值;但如果是user
07/24 19:44, 9F

07/24 19:44, , 10F
自己要求輸入null,那就是 null;所以我要一直判斷要不
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
那只要判斷是NULL還是0就好了阿?
07/24 19:48, 14F

07/24 20:00, , 15F
是有判斷以填入初始值沒錯;也很想改成覆蓋錯誤訊息
07/24 20:00, 15F

07/24 20:01, , 16F
只要一開始填初始值,以後全面覆蓋,眼不見為淨.. XD
07/24 20:01, 16F

07/24 20:02, , 17F
但一開始填的初始值,老實說填得不夠,後面還要續填..
07/24 20:02, 17F

07/24 20:03, , 18F
我有把那些值加到一開始的 init 裏去,被同事移掉了
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
文章代碼(AID): #1AQNPyMu (PHP)
討論串 (同標題文章)
文章代碼(AID): #1AQNPyMu (PHP)