萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php中static const define變量的區別

php中static const define變量的區別

在php中static const define三個變量都是可以叫做靜態表情了,意思是定義好的就不能再變了,但是他們三個是針對不同的域名,下面我來給各位介紹一下它們三個的區別吧。

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;
?>

copyright © 萬盛學電腦網 all rights reserved