首页 文章

为用户编写模型(php)

提问于
浏览
4

我有一个用户模型,它有很多属性,如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

    除非你在输入上进行验证,否则在我看来,使用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

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

    如果没有,你的属性在获取/设置时不需要任何逻辑,我会使用 __get__set .

    如果你真的不想设置“不正确”的属性(为什么?),一个选项可能是使用可以设置的属性白名单:

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

相关问题