为什么可以从对象范围外调用私有方法?

时间:2014-11-21 17:00:18

标签: php methods visibility

我很好奇为什么允许这样做,从而可以从对象作用域外部调用并成功执行对象的私有方法,前提是您正在从相同类型的类进行调用。

从公共范围到我的私有方法调用似乎不满足私有方法的标准,那么为什么在PHP和Java中都允许这样做?

<?php

class A
{

    public function publicMethod ()
    {
        $obj = new static;
        $obj->privateMethod ();
    }

    private function privateMethod ()
    {
        echo 'why does this execute?';
    }

}

$obj = new A;
$obj->publicMethod ();

2 个答案:

答案 0 :(得分:0)

私有修饰符定义您在本地范围内调用属性或方法我指的是同一个类。 虽然它自己的类是唯一的调用者,但您可以在公共方法中使用它,然后在本地范围之外调用该公共方法(所有者类)

答案 1 :(得分:0)

  

相同类型的对象可以访问彼此私有和受保护的成员,即使它们不是同一个实例。这是因为在这些对象内部时已经知道实现特定的细节。

- Visiblity,PHP手册