为用户编写模型(php)


Writing a model for a user (php)

我有一个用户模型,它有很多属性,如first_name、last_name、电子邮件、地址、address2…等等

我正在编写一个php类来管理这些属性,但似乎我正在编写许多相同的代码。(Getters和setters)。我应该用神奇的方法来管理它吗?这似乎是个不错的主意,但我不希望设置不正确的属性。有什么想法吗?

<?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;
        }
        ...
}
?>

除非您正在对输入进行验证,否则在我看来,在这里使用getter/setter是没有意义的。

将属性设为public,并使用魔术方法覆盖无效属性的getters/ssetter:

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

首先,你不能使用公共属性吗?

如果没有,并且您的属性在获取/设置时不需要任何逻辑,我将使用__get__set

如果你真的不想设置"不正确"的属性(为什么?),可以选择使用可以设置的属性白名单:

function __set($key, $value) {
    $whitelist = array("firstname", "lastname", ..);
    if(!in_array($key, $whitelist))
        throw new Exception("Invalid property");
}