PHP編程中有哪些常見的低級錯誤?
- isset
$a = null;
var_dump(isset($a)); //false
- 精度損失問題(非bug)
$f = 0.57;
echo intval($f * 100); //56
- empty
$a = "0";
if(empty($a)){
echo empty; //為空
} else {
echo not empty;
}
- 三目運算符
$a = 1;
echo isset($a) ? 1 : isset($b) ? 2 : 3; //2
- BOM頭問題
通常會導致json錯誤,還會導致導致Message: Cannot modify header information...
- 引用賦值後未銷毀遍歷
$arr = array(1, 2, 3);
foreach ( $arr as $value ) {
$value = $value * 2 ;
}
foreach($arr as $value) {
echo $value; //2 4 4
}
- strpos() ,請使用===來檢查此類函數的返回值
$mystring = abc ;
$findme = a ;
$pos = strpos ( $mystring , $findme );
if ( $pos === false ) {
} else {
}
- php標籤問題,在純PHP文件中,不要帶關閉標籤?&>
如果PHP文件帶了關閉標籤?&>,不小心帶了換行或空格,你只能等哭了。
- 空字元串被分割後,並不為空
print_r(explode(,, )); //[]
- count()函數
var_dump(
count([]), //0
count(NULL), //0
count(aaa), //1
count(), //1
count(false) //1
);
查了半天bug,是不是經常寫出這樣:
if ($var = value) ...
那就寫成這樣吧:
if (value = $var) /* 直接報錯,這是為什麼很多人把常量放左邊啦 */
數字和字元串比較問題
var_dump(
0 == "a", // true
in_array("abc", array(0, 1)) //true
);
trim系列函數問題(非bug,讀手冊),請不要用它來剔除後綴名
var_dump(rtrim(abcppp.jpg, .jpg)); //abc
都怪我打字太快。。。
$result = $this-&>select();
return $reus<
原來用sublime的時候經常這麼寫,我打字好快打字好快打字好快
現在用phpStorm就沒這個問題=。=- 明文存取用戶密碼
- 硬編碼並版本控制後台系統的口令
- 不加密cookie
- "SELECT * FROM users where id={$_GET[uid]}"
- 自己DDOS自己 foreach ($uids as $uid) { $service = ..connect...; $service ... }
- if (條件滿足 ) { ... } 沒else,兩個月後發現神秘bug
- if流,if () { if () { if () { ... } } if () {} },不反向判斷簡化代碼
- 在一個view里算半天邏輯輸出一小段html
- 為傳參方便設計Class
- 把SESSION當NOSQL資料庫用, $_SESSION["post"][title] = ....
- $data流,$data = .. if (..) $data, $data, $data ... 一路$data
- 把Class當名字空間來用,method就是套了Class的function
- 這樣 $a-&>b[c][d][e] ... 還不用isset
- 把base64當加密演算法
- throw exception但懶得catch,以至於錯誤信息出現在http響應里讓用戶去catch
我來,我來這個問題親身經歷曾經給客戶上一個模板的時候,這個模板的錯誤讓我無言以對貼代碼
&
echo "&
";
if ( $sourceurl != "-1" $sourceurl != "" $sourceurl != "0" strstr( $sourceurl, "/" ) )
{
$SourceArr = explode( "/", $sourceurl );
$sourcename = $SourceArr[1];
$sourcefolder = $SourceArr[0];
echo " &";
echo $strPlusZone4;
echo "&
&&