类变量范围和可见性

Posted

技术标签:

【中文标题】类变量范围和可见性【英文标题】:class variable scope and visiblilty 【发布时间】:2014-04-05 14:13:33 【问题描述】:

我在 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 as:

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

你对这个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 无处可寻。

【讨论】:

感谢您的热情回复!

以上是关于类变量范围和可见性的主要内容,如果未能解决你的问题,请参考以下文章

java访问权限

块处理程序中变量的可见性(范围)

我应该使用React State进行用户交互(切换可见性类)吗?

Java原子变量类需要注意的问题

Java的作用域

C 存储类