如何处理不同类型的对象?
问题描述:
我在我的PHP代码中发现了一个问题。我习惯用对象和管理器编写PHP代码。例如:照片是一个对象和PhotoManager是一个管理员。我也有一个用户对象和一个用户管理器。如何处理不同类型的对象?
请参见下面的代码位:
<?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();
?>
的问题是,我想补充一个用户对象为照片对象。那么如何在PhotoManager中使用UserManager?因为我想从的UserManager访问loadById功能,当我加载用户为照片对象。
答
您应修改PhotoManager加载的UserManager作为一个属性:
class PhotoManager
{
private $userManager;
public function __construct() {
$this->userManager = new UserManager();
}
public function loadAll()
....
进行此更改后,您可以访问的UserManager通过$this->userManager->loadById()
的loadById()
。
答
看起来像MVP的设计,我真的不建议,但如果你真的需要,你可以把照片和用户实现共同的接口,或有照片管理器,反之亦然
内的UserManager