我的用户模型有很多属性,例如first_name,last_name,email,address,address2 ......等等。
我正在编写一个php类来管理这些属性,但似乎我正在编写很多相同的代码。 (吸气者和二传手)我应该使用魔法来管理吗?这似乎是一个好主意,但我不希望设置不正确的属性。有什么想法吗?
<?php
class User
{
private $username;
private $email
private $first_name;
private $last_name;
private $address;
private $address2;
function __construct()
{
}
function getUsername()
{
return $this->username
}
function setUsername($username)
{
$this->username = $username;
}
...
}
?>
答案 0 :(得分:1)
除非你对输入进行验证,否则我认为在这里使用getter / setter没有意义。
创建属性public
,并使用魔术方法覆盖无效属性的getter / setter:
class User
{
public $username;
public $email;
public $first_name;
public $last_name;
public $address;
public $address2;
public function __get($var) {
throw new Exception("Invalid property $var");
}
public function __set($var, $value) {
$this->__get($var);
}
}
$user = new User;
$user->username = 'foo'; // works
$user->foo = 'bar'; // errors
答案 1 :(得分:0)
首先,你不能使用公共财产吗?
如果没有且您的属性在获取/设置时不需要任何逻辑,我会使用__get
和__set
。
如果你真的不想设置“不正确”的属性(为什么?),一个选项可能是使用可以设置的属性白名单:
function __set($key, $value) {
$whitelist = array("firstname", "lastname", ..);
if(!in_array($key, $whitelist))
throw new Exception("Invalid property");
}