php新手常見問題

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 存在於數組中時返回 TRUEkey 能夠是任何能做爲數組索引的值。 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() 函數
相關文章
相關標籤/搜索