2009-12-30 93 views
0

我想呼應和訪問存儲在值[ 「_aVars:私人」]我將如何訪問此對象值?

$ OBJ - > _ VAR和$ OBJ - > _瓦爾:私人does not工作:(

下面是後續代碼var_dump $ OBJ

object(test_object)#15 (30) { 
    ["sDisplayLayout"]=> 
    string(8) "template" 
    ["bIsSample"]=> 
    bool(false) 
    ["iThemeId"]=> 
    int(0) 
    ["sReservedVarname:protected"]=> 
    string(6) "test" 
    ["sLeftDelim:protected"]=> 
    string(1) "{" 
    ["sRightDelim:protected"]=> 
    string(1) "}" 
    ["_aPlugins:protected"]=> 
    array(0) { 
    } 
    ["_aSections:private"]=> 
    array(0) { 
    } 
    ["_aVars:private"]=> 
    array(56) { 
    ["bUseFullSite"]=> 
    bool(false) 
    ["aFilters"]=> 

回答

4

:private var_dump輸出的一部分實際上並不是成員名稱的一部分,它表示_aVars成員爲private

因爲_aVars是私有的,所以它的值不能從對象外部訪問,只能從內部訪問。

你需要一個公共的getter函數或類似的東西來檢索這個值。

編輯

爲了澄清這一點,我做了一個例子:

class testClass { 
    public $x = 10; 
    private $y = 0; 
} 

$obj = new testClass(); 
echo "Object: "; 
var_dump($obj); 
echo "Public property:"; 
var_dump($obj->x); 
echo "Private property:"; 
var_dump($obj->y); 

上面的代碼產生以下輸出:

Object: 

object(testClass)[1] 
    public 'x' => int 10 
    private 'y' => int 0 

Public property: 

int 10 

Private property: 

注意什麼如何而來的嘗試之後私有變量的var_dump()。由於代碼無法從外部訪問$obj->y,這意味着var_dump()無法訪問它以產生任何關於它的信息。

由於$obj是一個局部變量,但是,var_dump()在那裏正常工作。這是var_dump()的一個特定特性,它將輸出有關受保護和專用對象成員變量的信息,所以這就是爲什麼您在對象轉儲中看到它的原因。這並不意味着你有權訪問它們。

+0

爲什麼當我var_dump整個事情時顯示所有的值,但當我嘗試var_dump特定值時不顯示所有值?如果隱私是問題,爲什麼它有時會被輸出? – Citizen 2009-12-30 22:10:11

+0

'var_dump()'專門顯示有關變量的所有信息,包括受保護和私有數據。但是,這並不意味着您可以訪問代碼中的受保護和私有數據。例如,如果你有一個對象'$ obj'並且你調用'var_dump($ obj)',你將看到整個對象。然而,如果你嘗試'var_dump($ obj-> privateMember)',你不會得到任何東西,因爲你的代碼不能訪問'$ obj-> privateMember',並且它不能被傳遞給'的var_dump()'。 – zombat 2009-12-30 23:13:00

+0

我會舉一個例子... – zombat 2009-12-30 23:13:42

1

,因爲它是一個私人方法:)你不能訪問它。我認爲根本不存在訪問它的方法,只要您不要將其更改爲public即可。