PHP - 類別常數:初學者指南

你好,有志於PHP開發的各位!今天,我們將要深入PHP中的類別常數世界。如果你是編程新手,別擔心;我會逐步引導你理解這個概念,就像我這些年來對無數學生所做的那樣。所以,來一杯咖啡(或者如果你喜歡,來一杯茶),我們開始吧!

PHP - Class Constants

什麼是類別常數?

在我們深入細節之前,讓我們先了解類別常數是什麼。想像你正在蓋一個房子(你的PHP類別)。你需要一些不會改變的固定尺寸,比如天花板的寬度。這正是PHP中類別常數的作用——與類別關聯的固定值,不會改變。

為什麼使用類別常數?

  1. 它們提供了一種在類別內定義固定值的方法。
  2. 它們比使用魔法數字或字符串更具可讀性和可維護性。
  3. 它們可以在不創建類別實例的情況下訪問。

現在,讓我們看看如何創建和使用類別常數。

類別常數的範例

讓我們從一個簡單的範例開始。想像我們正在創建一個表示圓形的類別。

class Circle {
const PI = 3.14159;

private $radius;

public function __construct($radius) {
$this->radius = $radius;
}

public function calculateArea() {
return self::PI * $this->radius * $this->radius;
}
}

// 使用類別常數
echo Circle::PI; // 輸出:3.14159

// 創建一個圓形並計算其面積
$myCircle = new Circle(5);
echo $myCircle->calculateArea(); // 輸出:78.53975

讓我們分解這段代碼:

  1. 我們在Circle類別中使用const關鍵字定義了一個名為PI的常數。
  2. 我們可以在類別方法內使用self::PI來訪問這個常數。
  3. 在類別外部,我們可以使用Circle::PI來訪問它。
  4. calculateArea()方法使用這個常數來計算圓的面積。

類別常數作為表達式

在PHP 5.6及之後版本中,你可以使用常數表達式來定義類別常數。這意味著你可以使用算術運算或甚至其他常數來定義新的常數。讓我們看一個範例:

class MathConstants {
const PI = 3.14159;
const TAU = self::PI * 2;
const HALF_PI = self::PI / 2;
}

echo MathConstants::TAU;    // 輸出:6.28318
echo MathConstants::HALF_PI; // 輸出:1.570795

在這個範例中,我們根據PI的值來定義TAUHALF_PI。當你有相互關聯的常數時,這個功能非常方便。

類別常數的可見性修飾符

從PHP 7.1開始,你可以對類別常數使用可見性修飾符。這讓你可以像屬性和方法一樣控制常數的可訪問性。讓我們看一個範例:

class Seasons {
public const SPRING = 'Spring';
protected const SUMMER = 'Summer';
private const AUTUMN = 'Autumn';
const WINTER = 'Winter'; // 沒有修飾符,默認為public

public function getSummer() {
return self::SUMMER;
}

private function getAutumn() {
return self::AUTUMN;
}
}

$seasons = new Seasons();

echo Seasons::SPRING; // 沒問題,它是public
echo Seasons::WINTER; // 也沒問題,它默認是public
echo $seasons->getSummer(); // 沒問題,通過public方法訪問protected常數
// echo Seasons::SUMMER; // 這會導致錯誤,SUMMER是protected
// echo Seasons::AUTUMN; // 這會導致錯誤,AUTUMN是private

讓我們分解可見性修飾符:

  1. public:可以從任何地方訪問。
  2. protected:只能在類別及其子類中訪問。
  3. private:只能在類別本身中訪問。

如果沒有指定可見性修飾符,則常數默認為public。

類別常數的實際應用場景

現在,我們了解了類別常數的工作原理,讓我們看看一些它在現實世界中非常有用的場景:

  1. 配置設置

    class DatabaseConfig {
    const HOST = 'localhost';
    const USERNAME = 'root';
    const PASSWORD = 'secretpassword';
    const DATABASE = 'myapp';
    }
  2. 錯誤代碼

    class ErrorCodes {
    const NOT_FOUND = 404;
    const SERVER_ERROR = 500;
    const UNAUTHORIZED = 401;
    }
  3. 類似於枚舉的結構

    class UserRoles {
    const ADMIN = 'admin';
    const EDITOR = 'editor';
    const SUBSCRIBER = 'subscriber';
    }

最佳實踐和建議

  1. 使用大寫字母:命名常數的慣例是使用全大寫字母,並用下劃線分隔空間。
  2. 不要過度使用:雖然常數很有用,但不要過度使用。將它們用於真正不變的值。
  3. 文檔化:總是要添加說明你的常數代表什麼的註釋,特別是當它們的目的從名稱上不容易理解時。

結論

好了,各位!我們已經穿越了PHP類別常數的土地。從基本使用到可見性修飾符,你现在有了在PHP類別中有效使用常數的工具。記住,常數就像你房子的基礎——它們為你的代碼提供穩定性和一致性。

在你繼續你的PHP冒險時,你會發現更多令人興奮的功能去探索。但現在,為你掌握類別常數而給自己一個鼓勵。持續編程,持續學習,最重要的是,在這個過程中玩得開心!

祝編程愉快,未來的PHP大師們!??‍??‍?

方法 描述
const CONSTANT_NAME = value; 定義一個類別常數
ClassName::CONSTANT_NAME 從類別外部訪問類別常數
self::CONSTANT_NAME 從類別內部訪問類別常數
public const CONSTANT_NAME = value; 定義一個public類別常數(PHP 7.1+)
protected const CONSTANT_NAME = value; 定義一個protected類別常數(PHP 7.1+)
private const CONSTANT_NAME = value; 定義一個private類別常數(PHP 7.1+)

Credits: Image by storyset