2016-09-22 52 views
0

我有一個類有一個變量的用戶:private $ uPass;PHP OOP - 使用var_dump從外部類訪問私有變量?

我剛剛注意到,當創建一個用戶實例,我在該實例上運行一個var_dump它只是列出所有的私有變量? 有什麼辦法可以關閉它嗎?

class User 
{ 
    private $uId; 
    private $uName; 
    private $uPass; 
    private $uPowers; 

$teamMembers[$count] = new User(); 

foreach ($teamMembers as $teamMember) 
{ 
    var_dump($teamMember); 
} 

然後輸出恰恰說明一切,包括密碼... Ofcourse他們加密,但還是不希望他們這樣的訪問!?

解決這個問題的正確方法是什麼?

+2

var_dump()與訪問私有變量不同。他們仍然無法訪問您的代碼。只對你的班級,調試工具和反思。 –

+0

如果var_dump對您來說太麻煩了,請檢查[ReflectionClass](http://stackoverflow.com/questions/11604946/can-i-get-the-value-of-a-private-property-with-reflection) 你不能「隱藏」它們的值,就像你無法將它從你的數據庫工具中隱藏起來一樣 你可以避免在PHP中填充值並且只在數據庫上測試它。 – Gectou4

回答

2

它做什麼它說,它的作用:

對象的所有公共,私有和受保護的屬性將在輸出除非對象實現__debugInfo()方法(在PHP 5.6.0實現返回)。

因此,您可以實施自定義__debugInfo方法,或者不要擔心。如果某人有權訪問您的源代碼或者該對象的序列化副本,這只是一種安全風險,而這兩者都可能表明存在更廣泛的安全問題。