php私有化变量,php 类中 通过成员方法访问成员变量有什么好处,我知道是争对于安全性,但不能解释怎么个安全法,...

匿名用户

1级

2013-07-05 回答

将成员变量私有化,并使用公有接口去访问,是为了保证数据的正确性,保证对象能够正常工作。

对象有两个作用,一是保存数据,二是拥有操作数据的方法。对象就是一个黑盒子,隐藏数据操作细节,而我们可以轻松地处理和取得数据,不需要了解内部的处理过程。对象的数据只由它自己去处理,没有外部干涉,这样的数据是安全的可信任的。

如果我们能够任意改变对象的数据,就是对其密封性的破坏。在"外力"的作用下,对象拥有的数据类型和值发生改变,很可能会影响其内部的处理过程,严重时会发生错误。

示例一:

class Division{

public $a;

public $b;

public function __construct($a, $b) {

if ($b == 0)

throw new Exception('division by zero!');

$this->a = $a;

$this->b = $b;

}

public function run() { return $this->a / $this->b; }

}

$a = new Division(5, 5);

$a->b = 0;

$a->run(); // 出错了,因为除数被设为了0在上例中,虽然构造函数对传入的变量经行了过滤,但由于变量是公有的,用户“不小心”更改了$b的值,造成了程序异常。

使用函数来访问变量,可以对变量经行预处理,防止用户传入了不合法的值。这就像是在对象的前面加上了一道“防火墙”,保证程序正常地工作。

示例二:

class A{

public function call() { echo 'A->call() is calling!'; }

}

class B{

private $_a;

public function setA(A $a) {

if (!is_callable($a, 'call'))

throw new Exception('A->call() is not callable!');

$this->_a = $a;

}

public function call() {

if ($this->_a)

$this->_a->call();

}

}在上例中,属性$a是私有的,只能通过setA()方法来设置。setA()方法中使用了PHP的“类型提示”功能,这就要求传入的参数必须是A的实例。在函数中的代码又检查了$a对象是否含有可以调用的$a->call()方法,如果失败就会抛出异常。从而保证了传入变量的正确性。

希望能帮到您~也希望能够及时采纳~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值