如何处理不同类型的对象?

时间:2012-03-09 19:00:17

标签: php

我在PHP代码中发现了一个问题。我习惯用对象和管理器编写PHP代码。例如:照片是一个对象, PhotoManager 是一个管理员。我还有用户对象和 UserManager

请参阅以下代码:

<?php

class Photo
{
    public $id;
    public $name;
    public $user;

    public function __construct($id, $name, User $user)
    {
        $this->id = $id;
        $this->name = $name;
        $this->user = $user;
    }
}

?>

<?php

class User
{
    public $id;
    public $name;

    public function __construct($id, $name)
    {
        $this->id = $id;
        $this->name = $name;
    }
}

?>

<?php

class PhotoManager
{
    public function loadAll()
    {
        // load all photos (array with objects)
    }

    public function loadById($id)
    {
        // return a single photo (object)
    }
}

?>

<?php

class UserManager
{
    public function loadAll()
    {
        // load all users (array with objects)
    }

    public function loadById($id)
    {
        // return a single user (object)
    }
}

?>

这很好用。请注意,在我当前的代码中,管理器在各种功能方面都要大得多。

我使用这样的经理:

<?php

$userManager = new UserManager();
$photoManager = new PhotoManager();

?>

问题是我想将用户对象添加到 Photo 对象中。那么在 PhotoManager 中使用 UserManager 的方法是什么?因为当我为照片对象加载用户时,我想从 UserManager 访问 loadById 功能

2 个答案:

答案 0 :(得分:1)

您应该修改PhotoManager以将UserManager作为属性加载:

class PhotoManager
{
    private $userManager;

    public function __construct() {
        $this->userManager = new UserManager();
    }

    public function loadAll()
    ....

进行此更改后,您可以通过loadById()访问UserManager的$this->userManager->loadById()

答案 1 :(得分:0)

这看起来像MVP设计,我不是真的推荐,但如果你真的需要,你可以让Photo和User实现一个通用界面,或者在照片管理器中有一个userManager,反之亦然