首頁 >後端開發 >php教程 >了解 PHP OOP 中的存取修飾符:公有、受保護和私有

了解 PHP OOP 中的存取修飾符:公有、受保護和私有

PHPz
PHPz原創
2024-09-11 06:33:541058瀏覽

Understanding Access Modifiers in PHP OOP: Public, Protected, and Private

在 PHP 物件導向程式設計 (OOP) 中,存取修飾符 控制類別屬性和方法的可見性。 PHP 中的主要存取修飾符是 public、protected 和 private。

本文將引導您了解這些存取修飾符的目的和用法,並解釋如何在 PHP OOP 中有效地應用它們。

1.公共存取修飾符

  • 關鍵字:公開
  • 可見性:可從任何地方存取-類別內部、類別外部以及衍生類別中。
  • 用例:將 public 用於應可從任何上下文存取的屬性或方法。

例子:

class User {
    public $name = "John";

    public function greet() {
        return "Hello, " . $this->name;
    }
}

$user = new User();
echo $user->greet();  // Output: Hello, John

在此範例中,屬性 $name 和方法greet() 都是公共的,允許從類別外部直接存取它們。

2.受保護的存取修飾符

  • 關鍵字:受保護
  • 可見性:可在類別本身內和子類別(子類別)訪問,但不能從類別外部訪問。
  • 用例:使用 protected 允許衍生類別存取某些屬性或方法,同時對外部程式碼隱藏它們。

正確存取的範例:

class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

class Employee extends Person {
    public function showAge() {
        return $this->getAge();  // Correct: Accesses protected method within a subclass
    }
}

$employee = new Employee();
echo $employee->showAge();  // Output: 30

在此範例中,getAge() 是受保護的方法,可在 Person 的子類別 Employee 類別中存取。

錯誤範例:

class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

$person = new Person();
echo $person->getAge();  // Error: Cannot access protected method Person::getAge()

錯誤訊息:致命錯誤:未捕獲錯誤:無法存取受保護的方法 Person::getAge()

在這種情況下,嘗試直接從 Person 的實例存取受保護的方法 getAge() 會導致錯誤,因為無法從類別外部存取受保護的方法。

3.私有存取修飾符

  • 關鍵字:私人
  • 可見性:只能在定義它的類別中存取。 無法從子類別或外部程式碼存取
  • 用例:使用 private 對類別外部的任何程式碼(包括衍生類別)隱藏屬性或方法。

正確存取的範例:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }

    public function showBalance() {
        return $this->getBalance();  // Correct: Accesses private method within the same class
    }
}

$account = new BankAccount();
echo $account->showBalance();  // Output: 1000

在此範例中,getBalance() 方法是私有的,因此只能在 BankAccount 類別中存取它。 showBalance() 方法是公用的,可用來間接存取私有 getBalance()。

錯誤範例:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }
}

$account = new BankAccount();
echo $account->getBalance();  // Error: Cannot access private method BankAccount::getBalance()

錯誤訊息:致命錯誤:未捕獲錯誤:無法存取私有方法 BankAccount::getBalance()

在這種情況下,嘗試直接從 BankAccount 的實例存取私有方法 getBalance() 會導致錯誤,因為無法從類別外部存取私有方法。

子類別中出現錯誤的範例:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }
}

class SavingsAccount extends BankAccount {
    public function showBalance() {
        return $this->getBalance();  // Error: Cannot access private method BankAccount::getBalance()
    }
}

$savings = new SavingsAccount();
echo $savings->showBalance();

錯誤訊息:致命錯誤:未捕獲錯誤:無法存取私有方法 BankAccount::getBalance()

這裡,私有方法 getBalance() 即使是像 SavingsAccount 這樣的子類別也無法訪問,這表明私有方法無法在其定義類別之外訪問。

4.訪問修飾符總結

修飾符 課堂內 衍生類別 課外 標題>
Modifier Inside Class Derived Class Outside Class
Public Yes Yes Yes
Protected Yes Yes No
Private Yes No No
公開 是 是 是

受保護

是 是 否 私人 是 否 否 表>
  • 5.最佳實務
  • 謹慎使用public
  • ,僅公開必要的內容。喜歡透過公共方法封裝和公開功能。
  • 使用 protected
  • 允許子類別存取必要的屬性或方法,同時對外部程式碼隱藏它們。

使用private完全封裝類別內部並防止來自外部或衍生類別的存取。

結論 PHP 的存取修飾符(public、protected、private)提供了一種管理 OOP 中可見性和封裝的機制。透過正確理解和應用這些修飾符,您可以建立更安全且可維護的程式碼。

以上是了解 PHP OOP 中的存取修飾符:公有、受保護和私有的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn