PHP最佳化的總結

來源:互聯網
上載者:User

標籤:使用   os   strong   for   art   代碼   ar   時間   

今天看了下PHPBB的相關規範,覺得有很多值得學習之處。

以下就幾點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、分支判斷,switch case好於if else

使用分支語句要比用很多if else好很多。

6、不要濫用@操作符

不要濫用@操作符,看上去很簡單,但實際上用@比不用@效率要差幾倍。 

特別不要在迴圈中使用@。

7、擷取時間的方法

很多時候我們習慣使用time()擷取目前時間,但time()終歸是一個函數,不如直接用$_SERVER[‘REQUEST_TIME‘]好一點。

8、字串長度判斷

兩種寫法:

(1)if(strlen($str) < 5){/* do something */}

(2)if(isset($str[5])){ /* do something */ }

第二種寫法要優於第一種。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.