Самосоздатель: что это за образец? PHP - PullRequest
1 голос
/ 10 мая 2010

У меня есть несколько классов, которые в основном являются интерфейсами для строк базы данных. Поскольку класс предполагает, что строка уже существует (__construct ожидает значение поля), существует открытая статическая функция, которая позволяет создавать строку и возвращать экземпляр класса.

Вот псевдокод (так что в этом есть ошибки и отсутствующие улучшения):

class fruit {

        public $id;

        public function __construct( $id ) {

                if ( ! is_numeric($id) ) {
                    throw new Exception("Id is not numeric.");
                }
                $this->id = $id;
            $sql = "SELECT * FROM Fruits WHERE id = $id";
            ...
            $this->arrFieldValues[$field] = $row[$value];
        }

    public function __get( $var ) {
        return $this->arrFieldValues[$var];
    }

    public function __set( $var, $val ) {
        $sql = "UPDATE fruits SET $var = " .  mysql_real_escape_string($val) . " WHERE id = $this->id";
    }

        public static function create( $fruit ) {

        $sql = "INSERT INTO Fruits ( fruit_name ) VALUE ( '" mysql_real_escape_string($fruit) . "' )";
        $id = mysql_insert_id();        
        $fruit = & new fruit($id);
            return $fruit;

        }
}

$obj1 = fruit::create( "apple" );
$obj2 = & new fruit( 12 );

Как называется этот шаблон?


Редактировать: я изменил пример на тот, который имеет больше функциональности интерфейса базы данных. Большую часть времени класс такого типа создавался бы нормально, через __construct(). Но иногда, когда вам нужно сначала создать новую строку, вы вызываете create().

Ответы [ 2 ]

5 голосов
/ 10 мая 2010

Я думаю, что это Шаблон фабричного метода .

Шаблон фабричного метода - это объектно-ориентированный шаблон проектирования для реализации концепции фабрик.

Как и другие шаблоны творчества, он решает проблему создания объектов (продуктов) без указания точного класса объекта, который будет создан. Шаблон проектирования фабричного метода решает эту проблему путем определения отдельного метода для создания объектов, которые затем можно переопределить, чтобы указать производный тип создаваемого продукта.

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

0 голосов
/ 10 мая 2010

Поскольку это связано с базами данных, я думаю, что это близко к тому, что можно назвать Data Mapper .

Если вы ищете что-то подобное в PHP, перейдите на Propel ORM . Посмотрите на первый пример: это почти ваш код!

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