我很好奇为什么这是允许工作的,因此您可以从对象作用域之外调用并成功执行对象上的私有方法,只要您使用相同类型的类进行调用即可。为什么你可以从对象范围之外调用私有方法?
从公共范围到我的私有方法调用似乎不符合私有方法的标准,那么为什么在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 2014-11-21 17:02:34
@Popnoodles它不是同一个对象。 publicMethod中的$ obj和外部区域中的$ obj是不同的变量(一个是全局的,一个是局部的..参见[Variable Scope](http://php.net/manual/en/language.variables。 scope.php)在PHP手册中)。即使它们是同一个变量,您也可以清楚地看到$ obj正在publicMethod中设置为A的新实例。 – Powerlord 2014-11-21 17:34:49
不考虑语义,私有方法是从公共方法私下调用的;这不是公开呼吁。如果公共方法不能访问私有方法,是不是会使私有方法变得冗余? – Popnoodles 2014-11-21 18:14:56