Home  >  Article  >  Backend Development  >  关于php访问控制的问题

关于php访问控制的问题

WBOY
WBOYOriginal
2016-06-20 12:49:141017browse

class MyClass{    public $public       = 'public';    protected $protected = 'protected';    private  $private    = 'private';        function printHello(){        echo $this->public;        echo $this->protected;        echo $this->private . "<br/>";    }}$obj = new MyClass();$obj->printHello();class MyClass2 extends MyClass{       function printHello(){        echo $this->public;        echo $this->protected;        echo $this->private . "<br/>";    }}$obj2 = new MyClass2();$obj2->printHello();   // 输出 Public、Protected 和 Undefinedclass MyClass3 extends MyClass{   }$obj3 = new MyClass3();$obj3->printHello();   // 输出 Public、Protected 和 private

为什么$obj3->printHello的private有值,不是private 定义的类成员则只能被其所在类访问。


回复讨论(解决方案)


MyClass2 中有printHello 重写了 MyClass中的printHello。
而MyClass2 调用 MyClass的$private为undefined 因为MyClass2的printHello方法没有权限读取MyClass的$privite

MyClass3 中没有printHello,所以$obj3->printHello实际上是调用MyClass的printHello
MyClass printHello方法读取 Myclass $private有权限。所以 $obj3->printHello可以显示出MyClass 的 $private

MyClass2 中有printHello 重写了 MyClass中的printHello。
而MyClass2 调用 MyClass的$private为undefined 因为MyClass2的printHello方法没有权限读取MyClass的$privite

MyClass3 中没有printHello,所以$obj3->printHello实际上是调用MyClass的printHello
MyClass printHello方法读取 Myclass $private有权限。所以 $obj3->printHello可以显示出MyClass 的 $private


是不是因为MyClass3的printHello方法从MyClass继承,printHello方法是公开的,MyClass3的堆里的printHello还是指向MyClass的MyClass的printHello位置。

楼上正解!!!!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn