深入解析 PHP 访问修饰符:public、private 与 protected 的作用域及继承规则

星野
星野
发布时间:2026-10-13 | 5人浏览过
原创

PHP 通过 public、protected 和 private 三个关键词严格控制类成员的可见性。理解它们的作用范围及在继承中的约束条件,是编写安全、规范面向对象代码的基础。

三大访问修饰符的作用范围

在 PHP 面向对象编程(OOP)中,访问修饰符决定了类属性或方法的可访问性。根据限制程度从严格到宽松,主要分为以下三类:

第1步:使用 private(私有)限制最高访问级别

  • 目的:实现严格的封装,保护核心数据不被外部或意外修改。
  • 作用范围:private 成员 只能在当前类的内部被访问。
  • 表现:无论是类外部的实例化对象,还是子类的代码,都无法直接读取或修改私有属性和方法。若尝试访问,将触发致命错误(Fatal Error)。

第2步:使用 protected(受保护)平衡继承需求

  • 目的:允许派生类在保持一定封装性的前提下复用父类逻辑。
  • 作用范围:protected 成员可以在 类内部以及继承该类的子类内部使用。
  • 限制:类外部不能使用。也就是说,即使是在子类所在的文件中,如果通过父类的实例化对象来调用,也是无法访问这些属性的【即实例化后的对象无法直接调用】。

第3步:使用 public(公有)开放所有访问

  • 目的:提供通用的 API 接口供外部业务逻辑调用。
  • 作用范围:public 成员在全局范围内适用。无论是在类内部、子类内部,还是在类外部通过实例化对象,均可自由访问。

子类重写方法的权限约束

在进行面向对象开发时,子类往往会重写(Override)父类的方法以实现多态行为。此时,访问修饰符的权限大小需要遵循特定的“继承原则”。

第4步:遵守“发扬光大”的权限继承规则

  • 核心规则:子类中重写的访问修饰符的权限范围 要大于或等于 父类中的定义。
  • 逻辑解释:继承的本质是功能扩展,而非降级。如果父类将某方法定义为 public(最宽泛),子类将其改为 private(最严格),会导致外部原本可以正常调用的功能突然失效,这破坏了面向对象的契约精神。
  • 具体对照:
    • 若父类方法是 public,子类只能为 public(不可改为 protected 或 private)。
    • 若父类方法是 protected,子类可为 public 或 protected(不可改为 private)。
    • 若父类方法是 private,则子类无法直接重写该方法(因为子类本就访问不到),通常需借助公共方法或保护方法作为中转。
  • 总结口诀:“继承只能发扬光大,至少保持不变,不可以丢失东西。”

示例代码演示

通过以下代码直观感受不同修饰符的效果:

class ParentClass {
    public $pub;
    protected $prot;
    private $priv;

    // 父类构造方法初始化
    function __construct() {
        $this->pub = "Public Value";
        $this->prot = "Protected Value";
        $this->priv = "Private Value";
    }
}

class ChildClass extends ParentClass {
    public function showValues() {
        // 子类内部可以访问所有属性
        echo $this->pub;   // 输出: Public Value
        echo $this->prot;  // 输出: Protected Value
        echo $this->priv;  // 输出: Private Value
    }
}

$obj = new ChildClass();
// $obj->pub 可访问
// $obj->prot 报错
// $obj->priv 报错
$obj->showValues();
以上就是 PHP 访问修饰符 private、protected、public 的作用范围及继承规则的详细内容,更多关于 PHP 面向对象开发基础与安全的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表