看板 PHP 關於我們 聯絡資訊
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
bibo9901 :真抱歉我看不懂 07/24 17:20
arrack :看不懂+1 07/24 17:23
appleboy46 :看不懂+1 我覺得你都會弄出一堆,大家平時看不到的 07/24 17:29
appleboy46 :問題 ............ 07/24 17:29
alpe :看不懂+1 07/24 17:48
bobju :不是unset不足以模擬,而是你的寫法實在是太危險,會出 07/24 18:35
bobju :什麼包無法預料. 07/24 18:35
HuangJC :我們知道,PHP 對於 0 和 真正的 unset 是有差別的 07/24 19:43
HuangJC :今天就是有要求'新帳號要有 default 值;但如果是user 07/24 19:44
HuangJC :自己要求輸入null,那就是 null;所以我要一直判斷要不 07/24 19:44
HuangJC :要填值,而不是只要空的就填初始值.測試方法以新帳號 07/24 19:45
HuangJC :來測最好.如果什麼都覆蓋,萬一是我打錯變數名,那也會 07/24 19:45
HuangJC :抓不到問題 07/24 19:45
lgzenith :那只要判斷是NULL還是0就好了阿? 07/24 19:48
HuangJC :是有判斷以填入初始值沒錯;也很想改成覆蓋錯誤訊息 07/24 20:00
HuangJC :只要一開始填初始值,以後全面覆蓋,眼不見為淨.. XD 07/24 20:01
HuangJC :但一開始填的初始值,老實說填得不夠,後面還要續填.. 07/24 20:02
HuangJC :我有把那些值加到一開始的 init 裏去,被同事移掉了 07/24 20:03
HuangJC :同事說:初始值只要最少的設定.別跟我說和同事溝通之 07/24 20:04
HuangJC :類的話,人的問題永遠那麼多;這時就反求諸己了.. 07/24 20:04