public访问控制
public访问控制是最常用的一种,它表示对象属性和方法可以在任何地方访问,包括类的外部。例如:
代码语言:javascript复制phpCopy codeclass Person {
public $name;
public function greet() {
echo "Hello, my name is " . $this->name;
}
}
$person = new Person();
$person->name = "John";
$person->greet(); // 输出 "Hello, my name is John"
在上面的示例中,$name属性和greet()方法都被声明为public,因此可以从类的外部访问。在创建新的Person对象后,可以使用$person->name属性设置$name属性的值,并调用$person->greet()方法输出相应的消息。
private访问控制
private访问控制表示对象属性和方法只能在类内部访问。这意味着,在类的外部无法直接访问或修改私有属性或方法。例如:
代码语言:javascript复制class Person {
private $name;
public function setName($name) {
$this->name = $name;
}
public function greet() {
echo "Hello, my name is " . $this->name;
}
}
$person = new Person();
$person->setName("John"); // 正确
$person->greet(); // 报错,因为$name是私有属性,无法从外部访问
在上面的示例中,$name属性被声明为private,因此无法从类的外部直接访问。相反,可以通过一个名为setName()的public方法来设置$name属性的值,并通过$person->greet()方法输出相应的消息。
protected访问控制
protected访问控制表示对象属性和方法只能在类内部和其子类中访问。这意味着,类的外部无法直接访问或修改受保护的属性或方法。例如:
代码语言:javascript复制class Person {
protected $name;
public function setName($name) {
$this->name = $name;
}
}
class Employee extends Person {
public function greet() {
echo "Hello, my name is " . $this->name;
}
}
$employee = new Employee();
$employee->setName("John"); // 正确
$employee->greet(); // 输出 "Hello, my name is John"
在上面的示例中,$name属性被声明为protected,因此无法从类的外部直接访问。相反,可以通过一个名为setName()的public方法来设置$name属性的值,并通过Employee类中的greet()方法输出相应的消息。由于Employee类是Person类的子类,因此可以在子类中访问protected属性。