OO Design: возвращение дочернего класса от родителя - PullRequest
0 голосов
/ 03 июня 2009

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

Допустим, у меня есть таблицы в моей базе данных - собака, кошка и мышь. Я хочу быть в состоянии назвать что-то вроде:

$animal = new Animal("dog", 12);

с классом животных, похожим на:

class Animal {
  protected $id;
  protected $legs;
  protected $height;
  function __construct($type, $id) {
    if ($type == "dog") {
      return new Dog($id);
    }
  }
}

class Dog extends Animal {
  function __construct($id) {
    $this->id = $id;
    $this->legs = 4;
    $this->height = 1;
  }
}

Это не работает, но я хочу иметь возможность вызвать новое животное и передать определенное животное и вернуть его. Как я могу создать это? (Я использую PHP).

Ответы [ 3 ]

5 голосов
/ 03 июня 2009

То, что вы ищете, на самом деле - это шаблон дизайна, называемый Factory Pattern. Вы можете прочитать об этом здесь:

Заводская модель

И еще несколько статей для PHP:

Разработка шаблонов в PHP
Основы использования фабричного шаблона в PHP

2 голосов
/ 03 июня 2009

То, что вы хотите, это «Фабричный шаблон». Вместо того, чтобы создавать новые Animal напрямую, вызовите функцию, которая выбирает тип животного для создания. В Java я, вероятно, сделал бы это статическим методом класса, а в Python я бы сохранил все классы Animal в словаре, связанном с ключом, чтобы я мог найти ключ и затем передать аргументы конструктору .

Для PHP я нашел статью о Использование фабричного шаблона в PHP .

0 голосов
/ 03 июня 2009

Я не знаю php, но если он помогает, шаблон дизайна, о котором вы говорите, называется

Завод

Попробуйте найти «Фабрику банд четырех» для объяснения паттерна.

Тогда попробуйте поискать "реализацию шаблона php factory"

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