@thorii

Использование __toString плохой тон?

__toString Я использую в шаблонизаторе, ниже код, будет понятнее чем на словах
$layout = new Layout('Path/to/Tpl.html');
  $form = $layout->createSection('/Path/to/Form.html'); // Регистрация подшаблона form.html
  $form->assign('name', 'Sign In');
$layout->assignGlobal('FORM', $form);
$layout->assignGlobal('title', 'Sign In');

createSection создаст экземпляр класса SectionShell
<?php
namespace Architect\RenderSystem;

class SectionShell {

    private $_layout;
    private $_vars;

    function __construct($path) {
        $this->_layout = $path;
    }

    /**
     * Public function: Assign local var
     *
     * Declaring a variable in the local namespace
     * of the template vars
     *
     * @param string $name
     * @param mixed $value
     */
    public function assign($name, $value) {
        $this->_vars[$name] = (is_object($value)) ? $value : new ValueShell($value);
    }

    public function assignMultiple($data) {
        foreach($data as $key => $value) {
            $this->assign($key, $value);
        }
    }

    /**
     * The conclusion to the template via a variable
     *
     * @return string
     */
    function __toString() {
        if(count($this->_vars) > 0) extract($this->_vars);
        if(file_exists($this->_layout)) {
            ob_start();
            include_once $this->_layout;
            $out = ob_get_contents();
            ob_end_clean();

            return $out;
        }
    }
}

Как видно, подшаблон формы компилируется при надобности вывести его в глобальный шаблон (<?=$FORM?>) Через метод __toString (пародия на ленивую загрузку). Мне кажется что это может считаться говнокодом (или нет?)! Стоит ли вместо toString использовать публичный метод, допустим display(); Тогда в шаблоне будет примерно следующее

<!DOCTYPE HTML>
<html>
<head><title><?=$title?></title></head>
<body>
   <div class="form">
      <?$FORM->display();?>
   </div>
</body>
</html>
  • Вопрос задан
  • 243 просмотра
Решения вопроса 2
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Imho display лучше, т.к __toString в данном случае это слишком неявное поведение.
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Стоит ли вместо toString использовать публичный метод, допустим display();
Конечно, стоит - явное лучше неявного.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы