РНР является создание класса для шаблоны много?


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

class template{
    private $templateString = "";
    private $templatePlaceholderStrings = array();
    private $templatePlaceholderValueStrings = array();

    function fillTemplateString($string){
        $this->templateString = $string;
        unset($string);
    }

    function fillTemplatePlaceholderStrings($array){
        $this->templatePlaceholderStrings = $array;
        unset($array);
    }

    function filltemplatePlaceholderValueStrings($array){
        $this->templatePlaceholderValueStrings = $arrray;
        unset($array);
    }

    function buildTemplate(){
        return preg_replace($this->templatePlaceholderStrings,
                    $this->templatePlaceholderValueStrings,
                    $this->templateString);
    }
}


413
3
задан 1 апреля 2011 в 01:04 Источник Поделиться
Комментарии
3 ответа

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

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

class template {
private $_templateText;

// Initialize the template with this method, as an instance of
// template doesn't make much sense without some text.
public static function factory($templateText) {
$template = new template();
$template->_templateText = $templateText;

return $template;
}

// This can be called as many times as needed. Alternatively, you could add a
// method that would take two arrays, with the idea that the two array's keys
// are coupled and paired off. If you choose to couple the two arrays, I would
// recommend avoiding passing them in to two different methods. Make the coupling
// as obvious as possible by passing them in to the same method.
public function replacePlaceholderTextWithString($placeholderText, $string) {
// ...
}

// This could have some additional error handling code that would verify that
// all placeholder text has been replaced and throw an exception if it hasn't.
// Otherwise, it would simply format the template text based on what had
// previously been passed in to replacePlaceholderTextWithString(...)
public function getFormattedTemplateText() {
// ...
}
}

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

2
ответ дан 4 апреля 2011 в 12:04 Источник Поделиться

Философски Я попытаюсь использовать встроенные классы как можно больше, и это выглядит как начало MessageFormatter класс.

Как Примечание стороны, вы, кажется, опечатка:

function filltemplatePlaceholderValueStrings($array){
$this->templatePlaceholderValueStrings = $arrray;
unset($array);
}

(С аргументом 2 R и установив переменную из трех р ... не уверен, если это ошибка в коде, или ошибка в вставить его здесь, но думал, я хотел указать на это).

0
ответ дан 3 апреля 2011 в 01:04 Источник Поделиться

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

-1
ответ дан 12 апреля 2011 в 02:04 Источник Поделиться