PHP是一門基于服務器端的編程語言,它已經成為了整個互聯網開發的主流工具之一。在PHP中,class是一種常見的面向對象編程的寫法,它允許開發者在不同作用域下定義不同的屬性和方法。一個類中除了方法,還可以定義常量。常量的值在整個程序運行過程中都是固定的,它們沒有被實例化對象所限制。因此,在寫class的時候,我們需要注意常量的使用。
在PHP中,常量的定義使用關鍵字const,每個常量都必須是public的。通常情況下,我們會在類的外部定義一個常量,并在內部使用。例如:
class Example {
public const NAME = 'example';
protected const NO = 0;
public function hello() {
echo 'Hello ' . self::NAME . '! ';
}
}
echo Example::NAME; // 輸出 example
echo Example::NO; // 報錯,常量為protected不能在類外部訪問
$e = new Example();
echo $e::NAME; // 報錯,常量不能使用對象實例訪問
上述示例中,我們定義了一個Example類,其中定義了兩個常量,分別是NAME和NO。在類中的hello方法中,我們使用了常量NAME,并打印了它的值。在使用常量的時候,需要使用self::調用,因為常量是靜態的,沒有對象實例。需要注意的是,常量NO的訪問權限為protected,不能在類的外部直接訪問。
除了使用常量,我們還可以使用靜態變量來保存固定的值。與常量不同的是,靜態變量可以被類的對象實例直接訪問。示例如下:
class Example {
public static $a = 100;
public $b = 200;
public function printExample() {
echo 'a='.self::$a.', b='.$this->b.PHP_EOL;
}
}
$e1 = new Example();
$e1->printExample();
$e2 = new Example();
$e2->printExample();
Example::$a = 300;
$e1->printExample();
$e2->printExample();
上述示例中,我們定義了一個Example類,其中定義了靜態變量$a和普通成員變量$b。在函數printExample中,我們分別打印了靜態變量$a和對象實例變量$b的值。然后我們創建了兩個Example對象,分別是$e1和$e2,再次打印$a和$b的值,并修改了靜態變量$a的值,再次打印靜態變量$a和對象實例變量$b的值。從打印結果可以看出,雖然所有對象實例共享同一個靜態變量$a的值,普通成員變量$b的值則是獨立的。
總的來說,在PHP中,class const不僅是一種定義常量的方式,也是一種限制訪問權限的方法。順便一提,const和define的區別在于定義方式不同: 用define()定義常量時,沒有區分大小號的變量名均會被定義為變量。const定義類常量的時候,命名空間會被解析;define()定義函數常量的時候,需要使用全局函數。在實際開發中,開發者根據具體情況選擇使用常量還是靜態變量。以上是PHP class const的一些介紹,希望能為大家提供一些參考。