2014-03-04 123 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​​公开数据。