在OO编程中,它会被瞧不起使用魔术方法,__get()并且__set()这些会导致封装泄漏出类吗?例如:
class User {
private $username;
private $password;
public function __set($name,$value) {
$this->$name = $value;
}
public function __get($name) {
return $this->$name;
}
}
Run Code Online (Sandbox Code Playgroud)
这有效地使private/ protected变量public.
你的代码:
class User {
private $username;
private $password;
public function __set($name,$value) {
$this->$name = $value;
}
public function __get($name) {
return $this->$name;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下是完全没必要的.
封装并不意味着 "一堆吸气剂和二传手".你可以将它重构为:
class User {
public $username;
public $password;
}
Run Code Online (Sandbox Code Playgroud)
就封装而言,它们是等价的.
一般而言__get并且__set有一些用途,但如果你能做到,你应该(特别是考虑到它们比通常的方法定义"慢得多").