Skip to content

访问控制符

  • public
  • protected
  • private
php
<?php

//1.在类的内部
class Person {
  public $name = '张三'; // 在类的外部可以访问
  protected $age = 10;   // 在类的内部和子类可以访问
  private $money = 100;  // 仅在类的内部访问

  public function intro() {
    // 在类的内部可以访问: 读
    echo $this->name;
    echo "<br/>";
    echo $this->age;
    echo "<br/>";
    echo $this->money;
  }

  public function setAge(int $age) {
    // 在类的内部可以访问: 写
    if ($age >= 100) {
      throw new Exception("不能大于100岁");
    }
    $this->age = $age;
  }

}

// 2.在类的外部
$p1 = new Person();
$p1->intro();
$p1->setAge(20);

echo $p1->name; // 可以访问 public 修饰的字段/方法
// echo $p1->age; // 不能访问 protected 修饰的字段/方法, 报错信息如下
// Fatal error: Uncaught Error: Cannot access protected property Person::$age
// echo $p1->money; // 不能访问 private 修饰的字段/方法, 报错信息如下
// Fatal error: Uncaught Error: Cannot access private property Person::$money


// 3.在子类中
class Student extends Person {
  public function __construct() {
    echo $this->name;  // 可以访问 public 修饰的字段/方法
    echo $this->age;   // 可以访问 protected 修饰的字段/方法
    // echo $this->money; // 不能访问 private 修饰的字段/方法, 报错信息如下:
    // Undefined property: Student::$money, 说明 private 修饰的字段/方法不会被继承
  }
}
$s1 = new Student();

Released under the MIT License.