在 PHP 中,我们可以使用访问控制关键字public
、protected
和private
来控制对象的属性和方法的访问权限。这些关键字决定了哪些成员可以被外部访问,哪些成员只能在类内部访问。具体的访问控制规则如下:
public
成员可以被任何代码访问,包括类内部、类外部和子类中。protected
成员可以在类内部和子类中被访问,但在类外部无法被访问。private
成员只能在类内部被访问,包括子类中也无法访问。
访问控制修饰符后面跟着的属性或方法就会受到这个访问控制的限制。下面我们来看一下示例代码:
代码语言:javascript复制class Person {
public $name;
protected $age;
private $password;
function __construct($name, $age, $password) {
$this->name = $name;
$this->age = $age;
$this->password = $password;
}
public function showName() {
return $this->name;
}
protected function showAge() {
return $this->age;
}
private function showPassword() {
return $this->password;
}
}
class Employee extends Person {
public function showInfo() {
return "Name: " . $this->showName() . "<br>" .
"Age: " . $this->showAge() . "<br>" .
"Password: " . $this->showPassword() . "<br>"; // 私有方法不可访问
}
}
$person = new Person("Tom", 25, "123456");
echo $person->name . "<br>"; // 公共属性可以直接访问
echo $person->age . "<br>"; // 受保护属性不可以在外部访问
echo $person->password . "<br>"; // 私有属性不可以在外部访问
$employee = new Employee("Alice", 30, "654321");
echo $employee->showInfo(); // 可以通过子类访问受保护和公共方法,但是不能访问私有方法
在上述示例代码中,我们定义了一个 Person
类,包括了公共、受保护和私有的属性和方法。然后我们又定义了一个 Employee
类,它继承自 Person
类。在 Employee
类中,我们定义了一个 showInfo()
方法,它可以调用 Person
类中的公共和受保护的方法来显示信息,但不能调用私有方法。
在示例代码的最后,我们创建了一个 Person
对象和一个 Employee
对象,分别用来演示访问公共、受保护和私有属性和方法的限制。