1. 不要在SELECT查詢中使用 * 在表中返回全部的字段,這會很是的慢。你只須要取出你須要的數據字段。若是你須要取出全部的字段,那麼可能你的表須要更改了。
錯誤1:foreach循環後留下懸掛指針
foreach循環中使用 引用 更改迭代的元素 這樣能夠提升效率,可是記得循環結束後銷燬引用,不然$value是數組中最後一個元素的引用,若是下面有用到這個變量的時候會出錯
//例子:
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}//now array(2,4,6,8)
unset($value); // $value no longer references $arr[3]
錯誤2:對isset()函數行爲的錯誤理解
isset($var); //當變量爲null或者不存在時,返回false,因此,要是檢查數組中某鍵是否存在時, bool
array_key_exists (
mixed
$key
, array
$search
),
array_key_exists() 在給定的
key
存在於數組中時返回
TRUE
。
key
能夠是任何能做爲數組索引的值。
array_key_exists() 也可用於對象。
錯誤5:內存使用低效和錯覺
一次sql查詢獲取多條記錄比每次查詢獲取一條記錄效率確定要高,但若是你使用的是php中的mysql擴展,那麼一次獲取多條記錄就極可能會致使內存溢出。
爲了不此類問題,能夠考慮分幾回完成查詢,減少單次查詢數據量;
錯誤6:忽略Unicode/UTF-8問題
php編程中,在處理非ascii字符時,會遇到一些問題,要很當心的去對待,要否則就會錯誤遍地。php
舉個簡單的例子,strlen($name),若是$name包含非ascii字符,那結果就有些出乎意料。在此給出一些建議,儘可能避免此類問題:mysql
-
若是你對unicode和utf-8不是很瞭解,那麼你至少應該瞭解一些基礎。推薦閱讀這篇文章。c++
-
最好使用mb_*函數來處理字符串,避免使用老的字符串處理函數。這裏要確保PHP的「multibyte」擴展已開啓。ajax
-
數據庫和表最好使用unicode編碼。sql
-
知道jason_code()函數會轉換非ascii字符,但serialize()函數不會。數據庫
-
php代碼源文件最好使用不含bom的utf-8格式。
錯誤7:假定$_POST老是包含POST數據
// js
$.ajax({
url: 'http://my.site/some/path',
method: 'post',
data: JSON.stringify({a: 'a', b: 'b'}),
contentType: 'application/json'
});
由於$_POST是全局變量,因此更改$_POST會全局有效。所以對於Content-Type爲 application/json 的請求,咱們須要手工去解析json數據,而後修改$_POST變量。編程
// php
$_POST = json_decode(file_get_contents('php://input'), true);
此時,咱們再去輸出$_POST變量,則會獲得咱們指望的輸出:json
array(2) { ["a"]=> string(1) "a" ["b"]=> string(1) "b" }
錯誤8:認爲PHP支持字符數據類型
看看下面的代碼,猜想下會輸出什麼:數組
for ($c = 'a'; $c <= 'z'; $c++) {
echo $c . "\n";
}
若是你的回答是輸出’a'到’z',那麼你會驚奇的發現你的回答是錯誤的。app
不錯,上面的代碼的確會輸出’a'到’z',但除此以外,還會輸出’aa’到’yz’。咱們來分析下爲何會是這樣的結果。
在PHP中不存在char數據類型,只有string類型。明白這點,那麼對’z'進行遞增操做,結果則爲’aa’。對於字符串比較大小,學過C的應該都知道,’aa’是小於’z'的。這也就解釋了爲什麼會有上面的輸出結果。
若是咱們想輸出’a'到’z',下面的實現是一種不錯的辦法:
$letters = range('a', 'z');
for ($i = 0; $i < count($letters); $i++) {
echo $letters[$i] . "\n";
}
錯誤9:忽略編碼標準
對於PHP開發者來講,是比較幸運的。由於有PHP編碼標準推薦(PSR),由下面5個部分組成:
PSR-0:自動加載標準
PSR-1:基本編碼標準
PSR-2:編碼風格指南
PSR-3:日誌接口標準
PSR-4:自動加載
錯誤10:錯誤使用empty()函數
檢查一個數組是否爲空最後的辦法是用 count() 函數