在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”而不是正常的方法定义).