【发布时间】:2015-01-19 21:40:50
【问题描述】:
我很好奇为什么允许这样做,您可以从对象范围之外调用并成功执行对象上的私有方法,前提是您从相同类型的类中进行调用。
对我来说,从公共范围调用私有方法似乎不满足私有方法的条件,那么为什么 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 ();
【问题讨论】:
-
您不是从外部调用它,而是从同一个对象中的方法调用它。
-
@Popnoodles 这不是同一个对象。 publicMethod 中的
$obj和外部区域中的$obj是不同的变量(一个全局变量,一个局部变量。请参阅 PHP 手册中的 Variable Scope)。即使它们是同一个变量,您也可以清楚地看到 $obj 在 publicMethod 中被设置为 A 的新实例。 -
抛开语义不谈,私有方法是从公共方法私下调用的;它没有被公开调用。如果公共方法不能访问私有方法,那岂不是让私有方法变得多余了?
标签: php methods visibility