Php 类变量范围和可视性

Php 类变量范围和可视性,php,class,private,public,protected,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; ech

我在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代码和保存数据库信息的类变量,我如何保护它呢

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


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

您对此问题有明确的解释

如果仍然不想隐藏它,请将变量设置为
静态

<?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);

如您所见,
$statvar
不见踪影。

谢谢您的回复!
MyClass Object
(
    [public] => Public
    [protected:protected] => Protected
    [private:MyClass:private] => Private
)