PHP是一種廣泛使用的編程語言,而類(class)是PHP中的重要概念之一。在類中,通過修飾符(即訪問控制符)來限定類的屬性和方法的訪問范圍,其中包括protected和public。本文主要介紹這兩個關鍵詞的用法與區別。
protected和public相同點就不必多言了,它們都是類成員的訪問控制符,主要的作用就是限制屬性和方法的訪問范圍。我們來看一個例子:
class A { protected $x = 100; public function getX() { return $this->x; } } class B extends A { function showX() { echo $this->x; } } $a = new A; $b = new B; echo $b->getX(); $b->showX();我們定義了一個A類和一個B類,其中A類中的屬性x被聲明為protected,在getX方法中可以訪問,但在類外和B類中不能直接使用。而在B類中,我們使用了protected屬性x,這毫無問題。同樣地,getX方法在類外和B類中可以使用。然而,在類外部我們無法訪問protected屬性x。
相反地,public關鍵詞用于聲明公共屬性和方法,在類內外都可直接使用。來看下面的代碼:
class Car { public $speed = 0; public function move() { $this->speed++; } } $car = new Car(); $car->move(); echo $car->speed;我們定義了一個Car類,其中有一個public屬性speed和一個public方法move,這意味著我們可以在類外直接訪問和修改它們。在這個例子里,我們定義了一個Car對象$car,當執行$car->move()時,$car的speed增加1,最后打印出速度。這就是public關鍵詞的最基本使用方法,使得屬性和方法在類內外都是可見的。(注:如果不使用public關鍵詞,則默認為public)
簡單介紹了protected和public的基本使用和區別,現在我們來看一下protected的高級用法。在前面的例子中,我們已經使用了extends關鍵詞,這意味著B類是A類的子類。這里涉及到一個重要的OOP概念——繼承(inheritance)。我們可以將類比成人,而子類就像是兒女,她們可以得到父母的一些基因,自己則可以加以改變和發展。在PHP中,子類繼承了父類所有的protected屬性和方法,可以更改它們的訪問和修改級別。以下是另一個例子:
class Shape { protected $x, $y; public function __construct($x, $y) { $this->x = $x; $this->y = $y; } } class Square extends Shape { public function __construct($sideLength) { parent::__construct($sideLength, $sideLength); } public function area() { return $this->x * $this->y; } } $square = new Square(5); echo $square->area();在這個例子中,我們定義了兩個類——Shape和Square,其中Shape類聲明了兩個protected屬性$x和$y,而Square類繼承了Shape類并重寫了構造函數,使得$x和$y的值相等。Square還定義了一個求面積的方法area,并使用$x和$y計算面積。在最后,我們新建了一個Square對象并使用area方法計算了它的面積。這就是protected關鍵詞的高級用法,使得父類的屬性和方法被子類所繼承和改變。
本文介紹了PHP中兩個重要的訪問控制關鍵詞protected和public的使用和區別。protected關鍵詞用于限制訪問范圍,只能在類內及其子類中訪問,例如繼承。public關鍵詞用于聲明公共屬性和方法,在類內外都可直接使用。在實際應用中,我們應該根據需求來確定屬性和方法的訪問權限,并合理地使用protected和public關鍵詞。