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

class sample{
protected $app_id;
function get_app_id(){
return $this->app_id;

}
function set_app_id($val){
$this->app_id=$val;
return true;

}

}
虽然不能直接访问app_id,但通过指定方法还是可以访问,
谁指点下,谢

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


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


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


示例一:

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()方法,如果失败就会抛出异常。从而保证了传入变量的正确性。


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

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网