2012-03-09 16 views
0

我在我的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功能,当我加载用户照片对象。

回答

1

您应修改PhotoManager加载的UserManager作为一个属性:

class PhotoManager 
{ 
    private $userManager; 

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

    public function loadAll() 
    .... 

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

0

看起来像MVP的设计,我真的不建议,但如果你真的需要,你可以把照片和用户实现共同的接口,或有照片管理器,反之亦然

内的UserManager
相关问题