2014-03-04 120 views
1

我發現在php.net類變量範圍和visiblilty

class MyClass 
{ 
    public $public = 'Public'; 
    protected $protected = 'Protected'; 
    private $private = 'Private'; 

    function printHello() 
    { 
     echo $this->public; 
     echo $this->protected; 
     echo $this->private; 
    } 
} 

$obj = new MyClass(); 
echo $obj->public; // Works 
echo $obj->protected; // Fatal Error 
echo $obj->private; // Fatal Error 
$obj->printHello(); // Shows Public, Protected and Private 

這對於工作

是罰款的代碼,但如果我用,如果爲:

class MyClass 
    { 
     public $public = 'Public'; 
     protected $protected = 'Protected'; 
     private $private = 'Private'; 

     function printHello() 
     { 
      echo $this->public; 
      echo $this->protected; 
      echo $this->private; 
     } 
    } 

    $obj = new MyClass(); 
print_r($obj); 

它給我所有的類變量的信息。

因此,如果我將它用作保存我的數據庫信息的API代碼和類變量,如何保護我的類變量信息。

回答

0

你對這個問題有明確的解釋,這個answer

如果仍然wan't將其隱藏,使該變量作爲static

<?php 
class MyClass 
{ 
    public $public = 'Public'; 
    protected $protected = 'Protected'; 
    private $private = 'Private'; 
    static $statvar='This is a secret !'; //<---- A static variable (wont be shown) 

} 

$obj = new MyClass(); 
print_r($obj); 

OUTPUT :

MyClass Object 
(
    [public] => Public 
    [protected:protected] => Protected 
    [private:MyClass:private] => Private 
) 

正如你可以看到$statvar是無處可見。

+1

謝謝你的回覆! –

2

http://in2.php.net/print_r

「的print_r()的var_dump()和var_export()也將展示保護與PHP 5的對象的私有財產」

print_r應該用於調試目的。您不應該使用它來使用API​​公開數據。