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

【问题讨论】:

    标签: php class private public protected


    【解决方案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 无处可寻。

      【讨论】:

      • 感谢您的热情回复!
      猜你喜欢
      • 1970-01-01
      • 2017-10-07
      • 2022-10-24
      • 2018-11-14
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 2015-10-20
      • 2014-09-20
      相关资源
      最近更新 更多