PHP面向对象:深入理解public、protected与private访问修饰符
在PHP面向对象编程中,正确理解和使用 public、protected 和 private 是构建安全、可维护代码的基础。本文将解析这三种访问修饰符的权限范围及继承特性。
三大访问修饰符的定义
PHP提供三种访问级别来控制类成员(属性和方法)的可见性:
- public(公共):最宽松的限制。如果不指定访问修饰符,默认即为
public。该成员可以在任何地方被访问,包括类内部、子类以及外部实例。 - protected(受保护):中等限制。该成员仅在类内部及其子类中可以访问,外部实例无法直接操作。
- private(私有):最严格的限制。该成员仅在定义它的类内部可见,子类无法继承或访问,外部更无法触及。
权限验证与继承演示
为了直观展示三者的差异,我们构建一个包含不同属性与方法的基础类,并观察其在子类的表现。
第1步:定义基础类
首先创建一个名为 Woman 的类,内部混合使用了三种修饰符:
class Woman{
public $name = "gaojin";
protected $age = "22";
private $height = "170";
function info(){
echo $this->name;
}
private function say(){
echo "这是私有的方法";
}
}
第2步:尝试外部访问
如果我们在外部实例化该类并试图访问不同级别的成员,结果如下:
$w->name:成功输出(因为它是 public)。$w->age:报错(protected 不可从外部访问)。$w->height:报错(private 不可从外部访问)。$w->say():报错(私有方法不可从外部调用)。
第3步:子类继承测试
创建子类 Girl 继承自 Woman,并在其方法中尝试访问父类成员:
class Girl extends Woman{
function info(){
echo $this->name; // public: 正常输出
echo $this->age; // protected: 正常输出
// echo $this->height; // private: 此行若取消注释将导致致命错误
}
function say(){
// parent::say(); // 如果父类say是protected则可行,但此处为private,故无法调用
echo "我是女孩";
}
}
核心结论
总结各修饰符的行为逻辑:public 属性与方法对任何人开放;protected 仅对本类及子类开放,实现了“血缘内共享”;而 private 则是封闭的孤岛,仅限当前类自我消化。合理运用这些规则能有效隔离数据变动风险。
以上就是PHP面向对象访问修饰符的详细内容,更多关于PHP编程技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









