gpt4 book ai didi

php - 对象集合类与否

转载 作者:可可西里 更新时间:2023-10-31 23:23:58 25 4
gpt4 key购买 nike

我正在尝试决定是为我的应用程序/数据库中的每种内容类型创建许多类,还是只坚持使用过程代码。

版本 1:

  • 为每个对象集合创建一个类:

    class App{

    protected $user_collection;

    function getUserCollection(){
    if(!isset($this->user_collection)
    $this->user_collection = new UserCollection($this);

    return $this->user_collection;
    }

    // ...

    }

    class UserCollection{

    function __construct(App $app){
    $this->app = $app;
    }

    function getUser($user){
    return new User($this->app, $user);
    }

    function getUsers($options){
    $users = $this->app->getDatabase()->query($options);
    foreach($users as &$user)
    $user = new User($this, $user);
    return $users;
    }

    // ...

    }

我用的是这样的:

$app = new App();
echo $app->getUserCollection()->getUser('admin')->email_address;


版本 2:

  • 将所有方法放在一个类中

    class App{

    function getUsers($options){
    $users = $this->getDatabase()->query($options);
    foreach($users as &$user)
    $user = new User($this, $user);
    return $users;
    }

    function getUser($user){
    return new User($this, $user);
    }

    // ...

    }

像这样使用:

$app = new App();
echo $app->getUser('admin')->email_address;


版本 3:

  • 使 getUsers() 成为“User”类中的静态方法(该方法实例化一个新的 User 对象):

    $app = new App();
    echo User::getUser($app, 'admin')->email_address;

我应该走哪条路? “用户”对象只是一个例子,App 还有其他对象,如“数据库”、“页面”等。

最佳答案

我会使用您的版本 1,但我会制作 App 的 getUser() 和 getUsers() 方法。这摆脱了笨拙的 getUserCollection() 调用,因为在 getUser() 内部而不是你只是调用 $this->user_collection。

关于php - 对象集合类与否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9872822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com