为用户编写模型(php)

时间:2011-05-24 18:22:07

标签: php

我的用户模型有很多属性,例如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;
        }

        ...
}
?>

2 个答案:

答案 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");
}