歡迎來到小豬圈!

2007-12-21

關於 PHP Constants (常數)

  • 關於 PHP 的常數:
    • 在宣告時其值必需為已知、固定的值。
    • 常數名稱在“慣例”上都是大寫,並且字詞間以底線分開。如:define('FOO_BAR', 'something');
    • 宣告該常數以後,在執行期間其值不能被改變。
    • 不管在哪宣告,全域都能存取。
  • 使用常數的目的之一是要決解“魔術數字”的問題,即程式碼中沒有註解或命名的數字,容易造成程式碼不易維護。
  • 使用常數時,效能不該是考量的要素之一,因為在 PHP 使用常數“並沒有”比用變數快!(這倒是出乎我的預料)剛試了一下,用常數反而慢一點點(差距很小,不曉得是不是我測試方式的關係)。
  • 以下為我測試的程式碼,註解的地方為可選的比較方式:
    <pre>
    <?php
    define('VAR1' , 'a long long long long long long long long long long long long long text');
    define('VAR2' , 'a long long long long long long long long long long long long long text');
    $var1 = 'a long long long long long long long long long long long long long text';
    $var2 = 'a long long long long long long long long long long long long long text';
    
    $start = 0;
    $end = 0;
    
    for($i =0; $i < 20; $i++){
      $tmp = null;
      $start = microtime(true);
      for($j =0; $j < 5000; $j++){
        $tmp .= $var1;
        //$tmp = "Something here" . $var1;
        //$tmp = "Something here{$var1} Nothing here{$var2}";
        //$tmp = "Something here{$GLOBALS['var1']} Nothing here{$GLOBALS['var2']}";
      }
      $end = microtime(true);
      echo 'V: ' . ($end - $start);
      echo "\t";
    
      $tmp = null;
      $start = microtime(true);
      for($j =0; $j < 5000; $j++){
        $tmp .= VAR1;
        //$tmp = "Something here" . VAR1;
        //$tmp = 'Something here' . VAR1 . ' Nothing here' . VAR2 ;
      }
      $end = microtime(true);
      echo 'C: ' . ($end - $start);
      echo "\n";
    }
    ?>
    </pre>
    
  • 自行定義的常數值,在宣告時必需為固定的值,如:
    define('TEST_TXT', 'some string here');
    
    但一個實用的例外(來自 wordpress 的 wp-config-sample.php),是用 magic constants 來取得路徑:
    define('ABSPATH', dirname(__FILE__));
    
  • PHP: Constants - Manual
  • Magic number (programming) - Wikipedia, the free encyclopedia

No comments:

Post a Comment

Comment Form Message

標籤分類

Blog Archive

Labels

Google Analytics Tracking Code

About Me

My photo
Keelung, R.O.C, Taiwan
一個不學無術、混吃等死的傢伙…