Шаблон проектирования для создания объектов экземпляра дочерних классов - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть таблица MySQL, в которой хранятся люди и компании.У них одинаковые поля.В php у меня есть

class User{
var $_id;
var $_data;
function loadDataFromDb()
{
}
}

class Company extends User
{
    function getName()
    {
    //some implemantation
    }
}


class People extends User
{
function getName()
{
//some implemantation
}
}

Какой самый лучший способ создания объектов.Когда я создаю свой объект, я не знаю, какой тип клиента.

Мне нужно что-то вроде:

$user = /* code missing */
$user->getName(); // this will trigger the appropiate method.`

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

Абстрактная фабрика рисунок:

interface AbstractUserFactory{
   public function buildUser($type);
}

class UserFactory implements AbstractUserFactory {
    public function buildUser($type='user'){
       if($type == 'user'){
          return new User();
       } else if ($type == 'company') {
          return new Company();
       } else if($type == 'people' ) {
          return new People();
       } else{
          throw new Exception("Unknown User type [$type]");
       }
    }

}
1 голос
/ 08 февраля 2012

Я думаю, что фабричный метод подойдет для данного случая, так как эта фабрика даст вам искомый объект.
Вы должны передать некоторую информацию, хотя, чтобы позволить фабрике решить, какой объект должен быть возвращен.

0 голосов
/ 08 февраля 2012

Как насчет использования ORM, подобного Doctrine, для такого рода работы.Он поддерживает наследование, поэтому вы можете сопоставить его со своей схемой базы данных (это должна быть конкретная стратегия класса наследования в Doctrine).

В противном случае попробуйте уточнить, в чем заключается ваша цель и конкретная проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...