php oop visibility:父类中的函数如何调用它自己的私有函数和子类公共函数

时间:2017-11-07 10:27:54

标签: php oop

我不知道如何提出这个问题,这就是为什么标题不是。好的,如果有人可以改变它..

它位于方法可见性下的PHP文档http://php.net/manual/en/language.oop5.visibility.php

let endIndex = stripped.range(of: ";")?.lowerBound ?? stripped.endIndex
let split = stripped[stripped.startIndex..<endIndex]

在上面的代码中<?php class Bar { public function test() { $this->testPrivate(); $this->testPublic(); } public function testPublic() { echo "Bar::testPublic\n"; } private function testPrivate() { echo "Bar::testPrivate\n"; } } class Foo extends Bar { public function testPublic() { echo "Foo::testPublic\n"; } private function testPrivate() { echo "Foo::testPrivate\n"; } } $myFoo = new Foo(); $myFoo->test(); // Bar::testPrivate // Foo::testPublic ?> 如何打印$myFoo->test()Bar::testPrivate 我认为它会打印Foo::testPublicFoo::testPrivate

2 个答案:

答案 0 :(得分:5)

private方法或属性只能从与其定义的完全相同的类中访问。Bar::testPrivate只能从Bar调用,这就是 {{1 } 意味着。相反,private只能从Foo::testPrivate类定义中的代码中调用。

由于Foo位于Bar::test,因此无法调用Bar。它可以调用的唯一实现是Foo::testPrivate。然而,Bar::testPrivate方法没有这样的限制,并且调用了子类的重写方法。

如果您覆盖public中的test方法,则情况会逆转:

Foo

现在代码完全在class Foo extends Bar { public function test() { $this->testPrivate(); $this->testPublic(); } ... } 范围内,只能调用Foo

答案 1 :(得分:0)

私有=从此类创建的对象可见,对外界不可见

受保护=对从该类继承的所有类和对象可见,但对外界不可见(您正在寻找的内容)

公开=无处不在