提问者:小点点

在PHP中,为什么可以在相同类类型的方法内部的新实例上调用私有方法?[重复]


为什么可以在相同类类型的公共方法内部的新实例上调用私有方法?

class Foo
{
    private function thePrivateMethod()
    {
        echo 'can not be called publicly?';
    }

    public function thePublicMethod()
    {
        $clone = new Foo;
        $clone->thePrivateMethod();
    }
}

$foo = new Foo();
$foo->thePublicMethod();
$foo->thePrivateMethod();

当在PHP7.3中运行时,上述结果将产生以下输出。18

can not be called publicly?

Fatal error:  Uncaught Error: Call to private method Foo::thePrivateMethod() from context

直观地说,我希望对Foo::thePrivateMethod()的第一次调用也会导致致命错误。但我在文件中找不到这种行为是允许的?


共1个答案

匿名用户

基本上,遵循面向对象的范例,您总是可以在自己的类中调用私有或受保护的方法。这里有一个表格可以更好地解释“为什么这样做有效”背后的概念

第一次,您调用一个公共方法,该方法在类的上下文中调用一个私有方法,因此这是允许的。第二次,您直接调用一个私有方法,这在类之外是不允许的。

是相同的属性概念,如果你在类中声明一个私有$test,你不能通过$foo=new Foo()访问它;$foo-

但是相反,您需要声明一个为您执行此操作的公共方法,然后调用它以获取$test$foo的值-

注意。因为您已经在类的上下文中初始化了对象,所以它总是被允许的。