类变量范围和可见性

时间:2014-03-04 07:12:49

标签: php class private public protected

我在php.net上找到了一个代码

  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

哪个适合工作

但如果我使用if:

    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代码和类变量,那么如何保护我的类变量信息。

2 个答案:

答案 0 :(得分:2)

来自http://in2.php.net/print_r

“print_r(),var_dump()和var_export()也将显示PHP 5对象的受保护和私有属性。”

print_r应该用于调试目的。您不应该使用它来使用API​​公开数据。

答案 1 :(得分:0)

您对answer的问题有明确的解释。

如果您仍然不想隐藏它,请将变量设为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无处可见。