2010-12-09 26 views
0

好的我知道我可以擁有私有屬性來防止在類之外使用屬性,但是是否也可以使該屬性在類之外不可見?PHP隱形類屬性

我的意思是說,如果我做了print_r()foreach()這個類,那麼是否有可能讓這個屬性出現?

+0

我記得前面有一個關於這個的討論,有一些PHP版本沒有顯示這些屬性。可悲的是我現在找不到它。你有什麼特別的理由你不想讓他們顯示?反射仍然可以用來看到它們。 – 2010-12-09 07:23:01

+0

這裏有兩個錯誤報告,http://bugs.php.net/bug.php?id=39118&edit=2和http://bugs.php.net/bug.php?id=35822&edit=1。正如你在迴應中看到的那樣,這不是一個錯誤,而是一個特徵。 – 2010-12-09 07:25:48

回答

0

global在所有的方法的一些模糊的變量名,並使用它們就像性質

我再也不想看到它做了,我也不知道你爲什麼要由開發商來隱藏檢查屬性,但我假設它會工作。

0

您不能隱藏調試函數的屬性,如print_r/var_dump。不過,你所能做的就是用__get/__set模擬性能,如:

<?php 
class MyClass { 
    public function __get($name) { 
     if($name == "bar") { 
     /* take bar from somewhere */ 
     } 
    } 
    public function __set($name, $value) { 
     if($name == "bar") { 
     /* store $value somewhere */ 
     } 
    } 
} 

$foo = new MyClass(); 
$foo->bar = 1; 

這樣,您就可以與foo- $>酒吧工作,就好像它是一個屬性,即使實際上不存在此類屬性當你做var_dump等。