2012-03-09 3 views
0

Я обнаружил проблему в своем 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(); 

?> 

Проблема заключается в том, что я хочу, чтобы добавить пользователя объект в Фото объекта. Итак, что же делать с помощью UserManager в PhotoManager ?? Потому что я хочу, чтобы получить доступ к функции loadById из UserManager, когда я загрузка Пользователя для Фото объекта.

ответ

1

Вы должны изменить PhotoManager загрузить UserManager как свойство:

class PhotoManager 
{ 
    private $userManager; 

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

    public function loadAll() 
    .... 

После внесения этих изменений, вы можете получить доступ к UserManager-х loadById() через $this->userManager->loadById().

0

Это выглядит как дизайн MVP, я не рекомендую, но если вам действительно нужно, вы могли бы сделать фото пользователя и реализовать общий интерфейс, или иметь userManager внутри менеджера фото и наоборот

Смежные вопросы