php - __get() 和 __set() 是否意味着泄漏封装?

标签 php oop

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

class User {
    private $username;
    private $password;

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

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

这有效地使private/protected 变量public

最佳答案

您的代码:

class User {
    private $username;
    private $password;

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

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

在这种情况下完全没有必要。

封装does not mean “一群 setter和getter ”。您可以将其重构为:

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

并且就封装而言,它们是等价的。

一般来说,__get__set 有一些用途,但如果你可以不用,你应该这样做(特别是考虑到它们比普通方法定义要 "considerably slower")。

关于php - __get() 和 __set() 是否意味着泄漏封装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24020097/

相关文章:

php - 发送自定义数据的 Apple 推送通知

php - 使用链接提交表单,但 isset 不起作用

php - 阻止 javascript 被执行

php正则表达式在子字符串中查找子字符串

java - 在 Java 中作弊单继承?

oop - 这个类+构造函数定义模式是否过于冗余?

php - 如何从 moltin 获取产品中获取特定数组值

C++:跟踪类对象

c++ 运算符重载 += 有效但 << 无效

c# - 实例化对象的不同方式