我很好奇爲什麼這是允許工作的,因此您可以從對象作用域之外調用併成功執行對象上的私有方法,只要您使用相同類型的類進行調用即可。爲什麼你可以從對象範圍之外調用私有方法?
從公共範圍到我的私有方法調用似乎不符合私有方法的標準,那麼爲什麼在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