Создавать функции класса на лету? - PullRequest
1 голос
/ 30 марта 2010

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

  1. Контроллер сообщает валидации, что требуется специальная функция валидации.
  2. Контроллер запускает проверку.
  3. --- Здесь ненадежно ---
  4. Класс проверки создает новый экземпляр класса контроллера ....
  5. Класс проверки запускает controller-> custom_validation_function ()
  6. Класс проверки возвращает true / false

Можно ли как-нибудь изменить это, чтобы сделать что-то подобное?

$validation = new validation;
// Insert rules here.
$validation->function() = $this->function();

Делая это, я мог избавиться от шага создания ненужного экземпляра класса.

Ответы [ 3 ]

6 голосов
/ 30 марта 2010

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

Посмотрите , как Zend Framework делает для идеи.
Также см. Пример, приведенный в моем ответе на этот связанный вопрос:

1 голос
/ 30 марта 2010

Оформить делегат пример на phpclasses.com.

$processruns->add(function() { echo "hello"; });
$processruns->add(function() { echo "world"; }); 

Кроме того, это обсуждение может помочь.

1 голос
/ 30 марта 2010

PHP на самом деле не поддерживает monkeypatching, но вы можете создать подкласс и использовать его в качестве объекта $validation (так я бы и сделал). Или вы можете найти способ использовать __call для этого: http://php.net/manual/en/language.oop5.overloading.php

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