例如:
class Father{ public $name = "父类的名称"; // 名字 private $secret = "父类的秘密"; // 秘密 protected $id = "110"; // 身份证 protected $salary = "10000"; // 收入情形 public function __construct(){ } public function showInfo() { echo $this->id.PHP_EOL; echo $this->secret.PHP_EOL; echo $this->salary.PHP_EOL; echo $this->name.PHP_EOL; }}class Son extends Father{ public function __construct(){ $this->secret = "子类变动父类的秘密"; $this->id = "220"; }}class Other{ public function otherShow(Father $father) { echo $father->name.PHP_EOL; echo $father->secret.PHP_EOL; echo $father->id.PHP_EOL; }}echo "以下是父级的输出-----------------------".PHP_EOL;$father = new Father();$father->showInfo();echo "以下是子级的输出-----------------------".PHP_EOL;$son = new Son();$son->showInfo();ECHO "以下是其他的输出-----------------------".PHP_EOL;$other = new Other();$other->otherShow($father);
以年夜将会输出以下内容:
以下是父级的输出-----------------------110父类的秘密10000父类的名称以下是子级的输出-----------------------220父类的秘密10000父类的名称以下是其他的输出-----------------------父类的名称PHP Fatal error: Uncaught Error: Cannot access private property Father::$secret in C:\Users150\Desktop\web\index.php:125Stack trace:#0 C:\Users150\Desktop\web\index.php(138): Other->otherShow(Object(Father))#1 {main} thrown in C:\Users150\Desktop\web\index.php on line 125Fatal error: Uncaught Error: Cannot access private property Father::$secret in C:\Users150\Desktop\web\index.php:125Stack trace:#0 C:\Users150\Desktop\web\index.php(138): Other->otherShow(Object(Father))#1 {main} thrown in C:\Users150\Desktop\web\index.php on line 125
注:可以看到otherShow方法里的后面两个输出,报错了,提示"Cannot access private property Father::$secret",中文的意思便是说:你没有权限去打仗到private属性$secret。但是,为什么$son的输出没有报错,由于$son的类是继续了Father,他可以继续了Father的所有的非private属性,$this->secret = "子类变动父类的秘密";这里修正了private 属性secret,但是在调用showInfo时确还是父级的秘密;$this->id="220",在调用showInfo时确是输出的是220,由于protected是可以被子类继续并修正的。
再次强调:
public谁都可以访问;protected是可以被子类继续并修正的;private是完备私有的。这些规则同样也可以适用在类的方法里,你可以手动调置不同的访问权限调用一下,试试看!