Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设计一个用户类-oop-php_Php_Oop - Fatal编程技术网

设计一个用户类-oop-php

设计一个用户类-oop-php,php,oop,Php,Oop,嗯。我正在应用程序中设计类 我有一个用户类。现在我需要列出用户,获取特定用户的信息等 起初,我试图做的是: class User { private $userId; private $name; private $age; function __construct() { // the code to get the user details from db and assign it to the properties.

嗯。我正在应用程序中设计类

我有一个用户类。现在我需要列出用户,获取特定用户的信息等

起初,我试图做的是:

  class User
    {

    private $userId;
    private $name;
    private $age;

    function __construct()
    {
       // the code to get the user details from db and assign it to the properties.
    }

    // get the list of all the users
    public function getUserList()
    {
    }

    // add a new user
    public function addUser()
    {
    }

    // gets the username
    public function getUserName($userId)
    {
    return $this->name;
    }


} 
以下是我的疑问:

  • 您认为从数据库中填充属性是一个好主意吗 构造函数?如果没有,你能建议一个更好的方法吗

  • 函数getUserList()和addUser()真的属于这个类吗?或者我应该创建一个单独的类来获取用户列表、添加、删除用户,然后创建另一个类来存储特定用户的信息吗?我应该如何着手设计这个


  • 谢谢

    我认为更好的选择是创建两个类,Users和User

    class Users implements IteratorAggregate {
        /**
         * @return User[]
         */
        public function getUserList() {}
    
        public function addUser(User $user) {}
    
        /**
         * @return User
         */
        public function getUser($userId) {}
    
        public function getIterator() {
            return new ArrayIterator($this->getUserList());
        }
    }
    
    class User {
         public $userId;
         public $name;
    
         public function __construct() {}
    }
    

    您的域对象不应该关心甚至不应该知道数据库。你可能想看看数据映射器模式:在
    User
    类中破坏封装有什么意义?@Jannis:你能告诉我为什么要使用IteratorAggregate吗。如果我直接调用getUSerList()返回一个数组呢?@user1285659您可以直接foreach这个类,如下所示:$list=newuserlist();foreach($user作为$user列出){}@djay根本没有意义。重点是演示如何将其编写为两个类而不是一个类。我太懒了,没法写能手和二传手;)