在PHP的类中可以使用public, protected, private来修饰成员属性和成员方法。
权限从大到小:public > protected > private
public:
本类内部/本类对象,子类内部/子类对象 可以访问
protected:
本类内部,子类内部 可以访问。
private:
本类内部 可以访问。
特别注意:
很多人总结说父类可以访问子类,其实这是错误的,继承是单向的,父类根本就不可能访问到子类,再说了继承自父类的的子类可能很多,它是无法辨别的。
但是为什么在父类的方法中可以访问到子类的public/protected,那是一种误解,实际上还是子类调用自己而已。例如:
class father {
public function a(){
$this->b();
}
}
class son extends father {
public function b(){
echo 'Haha'.PHP_EOL;
}
public function c(){
$this->a();
}
}
(new son())->c();// 可以访问的
(new father())->a();// 报错
分析一下:
son继承了father,所以完整的son可以看成
class son extends father {
public function b(){
echo 'Haha'.PHP_EOL;
}
public function c(){
$this->a();
}
public function a(){
$this->b();
}
}
那么a方法调用b方法,其实就是son类的内部调用。