PHP类中的访问修饰public, protected, private以及误解

在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类的内部调用。

发布了412 篇原创文章 · 获赞 25 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/raoxiaoya/article/details/103892440