类变量范围和可见性
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
无处可寻。
【讨论】:
感谢您的热情回复!以上是关于类变量范围和可见性的主要内容,如果未能解决你的问题,请参考以下文章