php – __get()和__set()是否意味着漏洞封装?

在OO编程中,它会被瞧不起使用魔术方法__get()和__set(),这些会导致封装泄漏出类吗?例如:

class User {
    private $username;
    private $password;

    public function __set($name,$value) {
        $this->$name = $value;
    }

    public function __get($name) {
        return $this->$name;
    }
}

这有效地使私有/受保护变量公开.

解决方法:

你的代码

class User {
    private $username;
    private $password;

    public function __set($name,$value) {
        $this->$name = $value;
    }

    public function __get($name) {
        return $this->$name;
    }
}

在这种情况下是完全没必要的.

封装does not mean“一堆吸气剂和二传手”.你可以将它重构为:

class User {
    public $username;
    public $password;
}

就封装而言,它们是等价的.

通常__get和__set有一些用途,但是如果你没有,你应该(特别是考虑到它们是“considerably slower”而不是正常的方法定义).

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...