受保护属性是使用protected关键字声明的类成员,可在自身及子类中访问但不可被外部直接调用。例如父类声明protected $name,子类可继承并访问该属性,而外部实例则无法直接访问。其作用在于平衡封装与继承,既隐藏内部状态又允许子类扩展功能,防止外部误操作。访问规则为:类内、子类中可访问;外部不可访问;特殊情况下,同类型对象间可通过方法互相访问protected属性,如Animal类的compareType方法可比较另一Animal实例的$type属性。合理使用可提升代码安全性和可维护性。

PHP中的受保护属性(protected property)是一种访问控制修饰符,用于限制类中属性的访问范围。它既不是完全公开的,也不是完全私有的,而是介于两者之间,主要服务于继承机制。
什么是受保护属性?
在PHP中,使用 protected 关键字声明的属性就是受保护属性。这类属性不能被类的外部直接访问,但可以在其自身的类中以及所有子类中被访问。
例如:
class ParentClass {protected $name = "父类";
public function getName() {
return $this->name;
}
}
class ChildClass extends ParentClass {
public function showName() {
return $this->name; // 可以访问父类的 protected 属性
}
}
$obj = new ChildClass();
echo $obj->showName(); // 输出:父类
// echo $obj->name; // 错误:不能从外部直接访问 protected 属性
受保护属性的作用
受保护属性的核心作用是支持封装和继承之间的平衡。它允许子类扩展父类功能的同时,避免外部代码随意修改关键数据。
立即学习“PHP免费学习笔记(深入)”;
- 实现数据封装:隐藏内部状态,只允许可信的子类访问
- 支持继承体系:子类可以复用父类的属性,增强代码可维护性
- 防止误操作:避免外部脚本直接修改对象的关键属性
访问范围详解
受保护属性的访问规则如下:
- 当前类中:可以自由访问
- 子类中:可以直接访问继承来的 protected 属性
- 类外部:不允许直接访问,会触发致命错误
- 同父类的不同实例间:子类方法中可以访问另一个同类型对象的 protected 属性(这是PHP的一个特性)
举例说明最后一点:
class Animal {protected $type = "哺乳动物";
public function compareType(Animal $other) {
if ($this->type === $other->type) {
echo "类型相同";
}
}
}
上面例子中,一个 Animal 对象可以通过方法访问另一个 Animal 对象的 protected 属性 $type,这在某些设计模式中非常有用。
基本上就这些。合理使用受保护属性能让你的面向对象设计更灵活、安全。










