本篇主要介紹php優化技巧,有興趣的朋友參考下,希望對大家有幫助。
程式設計師在編寫程式時,總是想要讓自己的程式佔用資源最小,運作速度更快,程式碼量更少。往往我們在追求這些的同時卻失去了很多東西。最佳化的目的是花最少的代價換來最快的運轉速度與最容易維護的程式碼。以下就幾點PHP的最佳化做下總結:
1、in_array的用法
避免使用在大型的陣列上in_array(),同時避免循環中包含超過20個元素的數組使用這個函數。 in_array()會非常消耗資源.對於小的數組這種影響可能很小,但是在一個循環中檢查大數組可能會需要好幾秒鐘的時間。如果您確實需要這個功能,請使用isset()來尋找陣列元素。實際上是使用鍵名來查詢鍵值。呼叫isset($array[$var])會比in_array($var,array_keys($array))快得多。
2、陣列鍵名
在PHP中,使用不經單引號所包含的字串作為陣列鍵名是合法的,但是我們不希望如此--鍵名應該總是由單引號包含而避免造成混淆。注意這是使用一個字串,而不是使用變數做鍵名的情況。
例如:
// 不好的写法 $foo = $assoc_array[blah]; // 好的写法 $foo = $assoc_array['blah']; // 不好的写法 $foo = $assoc_array["$var"]; // 好的写法 $foo = $assoc_array[$var];
3、字串表達 在PHP中以兩種不同的方式表示一個字串-單引號或雙引號。主要的區別在於語法解釋器會對雙引號表示的字串進行變數替換,而不會處理單引號表示的字串。因此您應該總是使用單引號,除非您真的需要在字串中處理變數。這樣,我們可以減少程式運行消耗,因為語法解釋器不需要每次多處理一大堆根本沒有變數的字串。
同樣,如果您在函數呼叫中使用了一個字串變數作為參數,您不需要將這個變數包含在引號中。這會導致語法解釋器多做好多無用功。記住,幾乎所有雙引號中的轉義符號對於單引號都是無效的。您需要留意以上的規則,但是有時為了程式碼的可讀性,可以適當的破例。
例如:
// 不好的写法 $str = "This is a really long string with no variables for the parser to find."; do_stuff("$str"); // 好的写法 $str = 'This is a really long string with no variables for the parser to find.'; do_stuff($str); // 有时候单引号不是那么合适 $post_url = $phpbb_root_path . 'posting.' . $phpEx . '?mode=' . $mode . '&start=' . $start; // 双引号有时候能让代码行更集中 $post_url = "{$phpbb_root_path}posting.$phpEx?mode=$mode&start=$start";
4、循環定義中的運算 運算部份如果有運算請務必進行最佳化。因為這部分會在循環中的每一步進行操作:
// 在每次循环中sizeof函数都要被调用 for ($i = 0; $i < sizeof($post_data); $i++) { do_something(); } // 您可以在循环起始部分对这个不变的量赋值 for ($i = 0, $size = sizeof($post_data); $i < $size; $i++) { do_something(); }
5、分支判斷,switchcase好於ifelse 使用分支語句比用很多ifelse好很多。
6、不要濫用@操作符
不要濫用@操作符,看起來很簡單,但實際上用@比不用@效率差幾倍。
特別不要在循環中使用@。
7、取得時間的方法
我們習慣使用time()取得目前時間,但time()終究是函數,不如直接用$_SERVER['REQUEST_TIME ']好一點。
8、字串長度判斷
兩寫法:
(1)if(strlen($str) < 5){/ * do something */}
(2)if(isset($str[5])){ /* do something */ }
##總結:以上就是這篇文章的全部內容,希望對大家的學習有所幫助。
相關推薦:
以上是php優化技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!