2013-11-26 113 views
-2
class Test 
{ 
    private $private = ""; 

    public function add($string) { 
     $this->private[] = $string; 
    } 

    public function evaluate(Test $container) { 
     return $container->private; 
    } 
} 

$test = new Test(); 
$test->add("zero"); 
$test->add("one"); 
$test->add("two"); 

$result = new Test(); 
print_r($result->evaluate($test)); 

上面的代碼演示了一個私有字符串的轉儲,這怎麼可能?那麼,爲什麼它被稱爲「私人」?「私人」不是不是真的私人?

任何人都可以解釋這一點嗎?

輸出:

Array (
    [0] => one 
    [1] => two 
    [2] => four 
) 
+3

因爲您是通過班級中的其他功能調用它的。它只對當前類和任何擴展類是私有的。如果您試圖直接調用'$ result-> private',它將無法工作。 –

+0

這個課程是私人的。你無法從外部訪問它。 – MurifoX

+1

@BenFortune我相信你錯過了這個問題,他從同一個類的不同實例訪問私有屬性。 – smassey

回答

2

因爲你調用從類內部的私有財產。 private意味着它只能被其自己的類中的屬性和方法使用。您可以調用允許使用該屬性的方法。私有屬性可以通過它的類訪問,即使它是類的不同實例。

你會發現以下幾點:

print_r($result::$private); 

會給你的錯誤:

Fatal error: Cannot access private property

+0

感謝您的回答:) –

0

這是因爲即使attribute $private是私有的,在類測試仍然知道它和能訪問它,即使它是一個不同的實例。如果您要創建第二個類Test2(),其中evaluate method需要Test實例,則評估將失敗。這有點棘手,但類Test完全知道它的成員,即使是來自遠程實例。

0

public function evaluate是公開的,它可以訪問類中的私有變量。你不能直接訪問公共變量,如$result->$private

0

是私人的,因爲你不能訪問這個變量/成員的類。

1

private在PHP中表示私有的任何對象的同一類型。

由於stated here in the PHP manual

Objects of the same type will have access to each others private and protected members even though they are not the same instances.

是的,這是一些其他語言不同,但據記載,這是它的工作方式。

+0

如果不是這樣的話,實現一個equals方法會很痛苦 –