我不知道如何提出这个问题,这就是为什么标题不是。好的,如果有人可以改变它..
它位于方法可见性下的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::testPublic
和Foo::testPrivate
答案 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)
私有=从此类创建的对象可见,对外界不可见
受保护=对从该类继承的所有类和对象可见,但对外界不可见(您正在寻找的内容)
公开=无处不在