當前位置: 首頁> 最新文章列表> PHP面向對象編程入門:如何使用訪問修飾符保護對象的屬性和方法

PHP面向對象編程入門:如何使用訪問修飾符保護對象的屬性和方法

M66 2025-06-05

PHP面向對象編程基礎:訪問修飾符詳解

在PHP開發中,面向對象編程(OOP)是一種主流的編程範式。它通過“類”和“對象”的結構組織代碼,使程序結構更清晰、易於擴展和維護。在實際開發中,合理控制類中屬性和方法的訪問權限至關重要,這就需要藉助訪問修飾符。

本文將詳細講解PHP中的三種訪問修飾符: public (公有)、 private (私有)和protected (受保護),並通過示例幫助你掌握其用法。

什麼是訪問修飾符?

訪問修飾符用於控制類中的屬性和方法的訪問級別,從而避免外部代碼對內部實現的干擾,增強程序的封裝性。 PHP支持以下三種修飾符:

  • public :公開訪問,任何地方都可以訪問。

  • private :私有訪問,僅限類的內部使用。

  • protected :受保護訪問,僅限類的內部及其子類使用。

1. 公有(public)訪問修飾符

public是最常見的訪問修飾符,它表示類的屬性或方法對外是開放的,任何地方都可以訪問或調用。

 class Person {
  public $name;

  public function sayHello() {
    echo "Hello, my name is " . $this->name;
  }
}

$person = new Person();
$person->name = "John";
$person->sayHello();  // 輸出:Hello, my name is John

在這個示例中, $namesayHello()都是公有的。外部可以直接賦值和調用,非常直觀,但也容易導致屬性被隨意更改,影響程序的穩定性。

2. 私有(private)訪問修飾符

private修飾的屬性和方法只能在定義它們的類內部訪問,外部無法直接訪問。這種方式增強了封裝性,是保護類內部實現的常見手段。

 class Person {
  private $name;

  public function setName($name) {
    $this->name = $name;
  }

  public function sayHello() {
    echo "Hello, my name is " . $this->name;
  }
}

$person = new Person();
$person->setName("John");
$person->sayHello();  // 輸出:Hello, my name is John

通過提供公有的setName()方法,外部仍然可以間接地設置$name ,但無法直接訪問該屬性,有效保護了數據的完整性。

3. 受保護(protected)訪問修飾符

protected介於privatepublic之間,它允許繼承類訪問該屬性或方法,但外部仍無法訪問。

 class Person {
  protected $name;

  public function setName($name) {
    $this->name = $name;
  }

  public function sayHello() {
    echo "Hello, my name is " . $this->name;
  }
}

class Student extends Person {
  public function study() {
    echo $this->name . " is studying.";
  }
}

$student = new Student();
$student->setName("John");
$student->sayHello();  // 輸出:Hello, my name is John
$student->study();     // 輸出:John is studying.

在上述代碼中, Student繼承自Person ,因此可以直接訪問受保護的$name屬性。 protected修飾符適合在類繼承的結構中使用,既保持了封裝性,又具備一定的靈活性。

總結

通過合理使用訪問修飾符,可以有效控制對象的屬性和方法的訪問範圍,從而增強程序的安全性與可維護性。在實際開發中:

  • 推薦將屬性設置為privateprotected

  • 通過public方法來操作屬性,增強數據安全;

  • 根據繼承關係選擇使用protected

  • 避免屬性暴露導致的不可控修改。

掌握這些基本原則,將幫助你寫出更健壯、更易維護的面向對象代碼。