1. 程式人生 > >php——21-關鍵詞 const(執行效率比 define 可能更高) define

php——21-關鍵詞 const(執行效率比 define 可能更高) define

語法及注意點

  • const 定義常量語法:const 常量識別符號 = 常量值;
  • const 關鍵字一般在類的聲明裡定義常量時使用;在 PHP 5.3.0 以後,可以使用 const 關鍵字在類定義的外部定義常量。
  • const 定義的常量預設為大小寫敏感。通常常量識別符號總是大寫的,而且也建議在開發過程中使用大寫

const 與 define 都可以定義常量,他們的區別是:

  • const 一般用於類成員變數的定義,一經定義,不可修改。define 不可用於類成員變數的定義,一般用於定義全域性常量。
  • const 不能在條件語句中定義常量
  • const 採用一個普通的常量名稱,define 可以採用表示式作為名稱
  • const 只能接受靜態的標量,而 define 可以採用任何表示式
  • const 定義的常量大小寫敏感,而 define 可通過第三個引數(為true表示大小寫不敏感)來指定大小寫是否敏感
<?php

const TEST='test';//外部const定義 //等同 define('TEST','test'); 但一般推薦用在類內部

class Person
{
    const NAME = 'tom';
    const name = 'john';//不建議使用小寫定義常量

    public function test()
    {
        //呼叫方法與靜態屬性相同
echo self::NAME . '<br>';//tom echo self::name . '<br>';//john //區分大小寫 echo TEST . '<br>';//test //外部定義的 const 內部也可以呼叫 } } $cc = new Person(); $cc->test(); //外部也可以呼叫類內部定義的 const 常量 echo Person::NAME . '<br>';//tom

define 不可用於類成員變數的定義,一般用於定義全域性常量。

<?php
define('TEST', 'test');//函式 //建議定義全域性的常量 const TEST1 = 'test1';//結構 //建議定義類內部的常量 class Test { //define('TEST2', 'test2');//報錯 //類內部不能使用 define public function tt() { echo TEST . '<br>';//test echo TEST1 . '<br>';//test1 } } $cc = new Test(); $cc->tt();

const 不能在條件語句中定義常量

<?php

$i = 10;
if ($i < 15) {
    define('AGE', 12);
    // const AGE1 = '20'; //報錯,條件語句內部不可以 const 定義常量
}
echo AGE . '<br>';//12
// echo AGE1 . '<br>';

const 採用一個普通的常量名稱,define 可以採用表示式作為名稱

<?php

$n = 'TT' . mt_rand(1, 999);//mt_rand 用於在傳入兩個值中獲取隨機值
define($n, 12);
echo constant($n);//12

//const $n=123;//報錯//const 採用一個普通的常量名稱,define 可以採用表示式作為名稱

只能接受靜態的標量,而 define 可以採用任何表示式

<?php

//const TT = (1 + 2).mt_rand(1,100);
define('TT1', (1 + 2).mt_rand(1,100));
//echo TT . '<br>';//報錯 //只能接受靜態的標量,而 define 可以採用任何表示式
echo TT1 . '<br>';//384

而 define 可通過第三個引數(為true表示大小寫不敏感)來指定大小寫是否敏感

<?php

define('Name','tom',true);//傳入 true 來不區分大小寫(預設區分)
echo Name.'<br>';//tom
echo namE.'<br>';//tom