2014-11-21 78 views
0

我很好奇爲什麼這是允許工作的,因此您可以從對象作用域之外調用併成功執行對象上的私有方法,只要您使用相同類型的類進行調用即可。爲什麼你可以從對象範圍之外調用私有方法?

從公共範圍到我的私有方法調用似乎不符合私有方法的標準,那麼爲什麼在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(); 
+7

你不能從外部調用它,你在同一個對象的方法調用它。 – Popnoodles 2014-11-21 17:02:34

+1

@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

+0

不考慮語義,私有方法是從公共方法私下調用的;這不是公開呼籲。如果公共方法不能訪問私有方法,是不是會使私有方法變得冗餘? – Popnoodles 2014-11-21 18:14:56

回答

0

對象將有機會獲得對方私人和受保護的成員,儘管他們不是同一個實例。這是因爲實現特定的細節在這些對象內部時是已知的。

- Visiblity,PHP手冊

0

Private修飾符定義您調用本地作用域中的屬性或方法由此我的意思是同一個類。 雖然它自己的類是唯一的來電者,你可以在一個公共的方法使用它,然後調用本地範圍以外的公共方法(所有者類)相同類型的

相關問題