」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 了解 PHP OOP 中的存取修飾符:公有、受保護和私有

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

發佈於2024-11-08
瀏覽:814

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() 是一種受保護的方法,可以在 Employee 類別(Person 的子類別)中存取該方法。

錯誤範例:

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.私有存取修飾符

  • 關鍵字:私有
  • Visibility:只能在定義它的類別中存取。 無法從子類別或外部程式碼存取
  • 使用案例:使用 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.存取修飾符總結

修飾符 課堂內 衍生類別 課外
民眾 是的 是的 是的
受保護 是的 是的
私人的 是的

5.最佳實踐

  • 謹慎使用public,僅公開必要的內容。喜歡透過公共方法封裝和公開功能。
  • 使用protected允許子類別存取必要的屬性或方法,同時對外部程式碼隱藏它們。
  • 使用private完全封裝類別內部並防止來自外部或衍生類別的存取。

結論

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

版本聲明 本文轉載於:https://dev.to/ialaminpro/understanding-access-modifiers-in-php-oop-public-protected-and-private-5bah?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3