了解 PHP OOP 中的访问修饰符:公共、受保护和私有

PHPz
发布: 2024-09-11 06:33:54
原创
900 人浏览过

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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!