首頁  >  文章  >  後端開發  >  php常數使用過程中需要注意的幾個問題

php常數使用過程中需要注意的幾個問題

伊谢尔伦
伊谢尔伦原創
2017-06-29 10:41:061482瀏覽

常數包含數字字母字元和底線,數字允許作為常數名稱。 常量名的所有字母都必須大寫。類別常數必須透過 const 定義為類別的成員,強烈不鼓勵使用 define 定義的全域常數

為什麼要謹慎使用PHP中的常數?

Zend Framework文件中寫道:常數包含數字字母字元和底線,數字允許作為常數名稱。 常量名的所有字母都必須大寫。類別常數必須透過 "const" 定義為類別的成員,強烈不鼓勵使用 "define" 定義的全域常數。

作為PHP的正式框架,為什麼會有這樣的要求?

讓我們一起分析一下。

1. define容易產生意想不到的錯誤

PHP常數是定義後就不能修改和再次賦值。但是如果再次賦值會怎麼樣?

<?php
 define(&#39;C&#39;, 12345);
 define(&#39;C&#39;, 123);
?>

這段程式碼會報個notice錯誤。帶來的後果是:在你定義之前,其它人要是定義了同名的常數,你可能真的不知道裡面究竟是什麼值。

2. 如何判斷PHP常數是否被定義?判斷方法易寫錯

<?php
 define(&#39;C&#39;, 12345);
 // 错误方法1,经常犯
 if (isset(C)){……}
 // 错误方法2,经常犯
 if (defined(C)){……}
 // 正确方法
 if (defined(&#39;C&#39;)){……}
?>

3. 執行效率低

<?php
  define(&#39;FORUM_THEME&#39;,$forum[&#39;theme&#39;]); 
  $this->display(&#39;/&#39;.FORUM_THEME.&#39;@Public:login&#39;); 
  // 系统会从整个执行流程中查找FORUM_THEME
?>

因為php處理常數的時候要進行多次查找,所以效率低。

總結:PHP常數的問題,在於PHP處理常數的方法過於寬鬆導致的,如果能夠嚴格一些,就會避免很多的問題。在實際過程,能用變數就不要用常數,因為變數的效率高使用比較方便。

因此若非要使用常數或類別變量,可使用下列方法:

<?php
 class foo {
  const WEBSITE = "www.zhuyinghao.com";
  protected $_forum_theme;
  function name()
  {
    echo WEBSITE;
    $this->_forum_theme = $forum[&#39;theme&#39;];
  }
  function displace() 
  {
    echo $this->_forum_theme;
  }
 }
?>

類別名稱和函數名稱相同時的作用

在PHP 4中,類別的建構子需要和類別名稱相同,子類別的建構函式名稱與子類別名稱相同,在子類別裡父類別的建構子不會自動執行。要在子類別裡執行父類別的建構函數,必須執行類似以下語句:

$this->[父類別的建構子名稱()]

在PHP 5.0 以上版本裡,統一使用construct()作為建構函數,但仍相容了4.0 版本的建構函數的定義規則。如果同時定義了4.0的建構子和 construct()函數,則construct() 函數優先。

用PHP EOL來取代/r/n進行換行

寫程式時會常用到換行,用PHP內建常數PHP_EOL來換行。

一個小小的換行,在不同的平台有不同的實作。在unix世界換行就用\n來代替,但是windows為了體現他的不同,就用\r\n,更有意思的是在mac中用\r。因此unix系列用 \n,windows系列用 \r\n,mac用 \r。

因此系統會依照平台系統的不同,轉換成不同的換行。如果要在瀏覽器中換行,就要使用PHP_EOL變數進行換行

以上是php常數使用過程中需要注意的幾個問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn