为了账号安全,请及时绑定邮箱和手机立即绑定

php 方法的访问控制

php 方法的访问控制

PHP
绝地无双 2019-03-18 18:11:15
class Bar{ public function testPublic(){ echo "Bar:testPublic"; } private function testPrivate(){ echo "Bar:testPrivate"; } }class Foo extends Bar{ public function testPublic(){ echo "foo:testPublic"; } private function testPrivate(){ echo "foo:testPrivate"; } }$obj=new Foo;$obj->testPublic();$obj->testPrivate();//报错不是很理解,Foo继承了Bar,但是在Foo中有重写了testPublic和testPrivate,就private来说,就应该是Foo里面的private,但是现在报错了。?>
查看完整描述

6 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞


private 只能在当前申明类的内部进行调用
protected 在当前申明类或者当前申明类的继承类内部可以调用
public 没限制

实例化之后的对象就只能访问public

查看完整回答
反对 回复 2019-03-18
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

private 是不允许外部访问的。

查看完整回答
反对 回复 2019-03-18
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

1、private修饰符无法在类实例化后直接调用
2、private可以继承、可以被重写,你可以在Foo Class 内调用父类的testPrivate,就是不能再实例化后调用

class Foo extends Bar{

    public function testPublic(){
        echo "foo:testPublic";
    }

    public function getTestPrivate(){
        $this->testPrivate();
    }

    private function testPrivate(){
        echo "foo:testPrivate";
    }
}

$foo = new Foo();
$foo -> testPublic(); // 正确
$foo -> getTestPrivate(); // 正确
$foo -> testPrivate(); // 错误
查看完整回答
反对 回复 2019-03-18
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

private 不能 被继承,protected 能被继承,不能被外部访问,public 能被继承,能被外部访问,楼上有误

查看完整回答
反对 回复 2019-03-18
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

很简单 父类的私有方法无法被继承,而继承父类的testpublic被覆盖,最后子类只有原来的你写的两个方法,而private代表私有,只允许在本类中访问,内外部访问不了,所以报错!

查看完整回答
反对 回复 2019-03-18
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

首先。private定义的方法是可以被继承的。但是private定义的方法不可以在类外通过其他方式去调用的。楼主尝试调用的话,应该能看到非法操作

查看完整回答
反对 回复 2019-03-18
  • 6 回答
  • 0 关注
  • 393 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信