php中static const define變數的區別

來源:互聯網
上載者:User

const

用來定義那些在運行時不能被改變的常數值。一旦定義且不能改變其值,假如在程式中改變了它的值,那麼會出現錯誤。

 代碼如下 複製代碼

<?php
 calss Math{
 const pi=3.14159;
}
echo Math::pi;
?>

前面沒有貨幣符號($),可以在不需要初始化該類的情況下實用。常量值必須是一個常量運算式。const定義的變數,在子類中可以被覆蓋。
在類的內部定義,php5.3以後也可以在類的外部定義。
const不可以用運算式。

define()

可以用 define() 函數來定義常量。一個常量一旦被定義,就不能再改變或者取消定義。
常量只能包含標量資料(boolean,integer,float 和 string)。
可以簡單的通過指定其名字來取得常量的值,不要在常量前面加上 $ 符號。
define定義全域常量,在任何地方都可以訪問。
define不能在類中定義而const可以。
define可以採用任何錶達式。如define('BIT_5', 1 << 5);

 代碼如下 複製代碼

<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // outputs "Constant" and issues a notice.
?>


define()與const()兩者之間的區別:

記憶體空間的分配上。define進行宏定義的時候,不會分配記憶體空間,編譯時間會在main函數裡進行替換,只是單純的替換,不會進行任何檢查,比如類型,語句結構等,即宏定義常量只是純粹的置放關係,如#define null 0;編譯器在遇到null時總是用0代替null它沒有資料類型(還有疑問請找C語言書籍看預先處理部分或者看MSDN.而const定義的常量具有資料類型,定義資料類型的常量便於編譯器進行資料檢查,使程式可能出現錯誤進行排查,所以const與define之間的區別在於const定義常量排除了程式之間的不安全性.
define定義全域常量,在任何地方都可以訪問
const用於類成員變數定義,只能用類名訪問不能更改要是初學這樣顯理解著就行別太鑽牛角尖就行

static

php中的變數作用範圍的另一個重要特性就是靜態變數(static 變數)。
靜態變數僅在局部函數域中存在且只被初始化一次,當程式執行離開此範圍時,其值不會消失,會使用上次執行的結果。
static關鍵字在類中,描述一個成員是靜態,static能夠限制外部的訪問,因為static後的成員是屬於類的,是不屬於任何對象執行個體。
static的成員,必須使用self來訪問。

 代碼如下 複製代碼

class Counter
{
public static $count = 0;//定義一個靜態屬性
//定義一個靜態方法
static function getCount()
{
return self::$count;
}

echo Counter::getCount();
Counter::count;

最後補充一個例子:

 

 代碼如下 複製代碼

<?php


echo HAHA;

class test {
    public $name2 = 'name2';
    static $name = 'name';
    const CHARSET = "中國";
    public function say_hello() {
        echo self :: CHARSET;
    }

    public static function set_name() {
        echo self :: $name;
    }

    public static function set_name2() {
        self::set_name();
    }
  
    public static function set_name3() {
        echo $this->name;
        $this->set_name();
    }
  
}
$const1 = new test();

// 1
$const1->say_hello();

// 2
echo "<br />";
echo test :: CHARSET;

// 3
echo "<br />";
echo $const1->name;

// 4
echo "<br />";
echo $const1->set_name();

// 5
echo "<br />";
echo $const1->set_name2();

// 6
echo "<br />";
echo test::CHARSET;

// 7
echo "<br />";
echo $const1->CHARSET;
?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.