2012-03-09 12 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(); 

?> 

問題は、私は写真オブジェクトにユーザーオブジェクトを追加したいということです。だから、UserManagerPhotoManagerにはどのような方法がありますか?私は写真オブジェクトに対してユーザーをロードしていたとき、私はのUserManagerからloadById機能にアクセスしたいので。

答えて

1

あなたは財産としてのUserManagerロードするためにPhotoManagerを変更する必要があります。

class PhotoManager 
{ 
    private $userManager; 

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

    public function loadAll() 
    .... 

この変更を行った後、あなたがアクセスできるのUserManagerのloadById()$this->userManager->loadById()経由。 MVPのデザインのように見える

0

は、私は本当にそれをお勧めしませんが、あなたが本当にする必要がある場合は、写真作ることができ、ユーザーが共通のインターフェースを実装するか、写真のマネージャーとその逆

内部のUserManagerを持っています
関連する問題