Альтернативы для включения и требуют PHP

1

Я использую Sensio Insights для обнаружения ошибок в моей архитектуре.

У меня есть базовый класс шаблонов, который использует выходной буфер для вывода вывода моего шаблона.

private function output() {
    if (is_readable($this->file)):
        extract($this->data);
        ob_start();
        require $this->file;
        $output = ob_get_contents();
        ob_end_clean();

        return $output;
    else:
        trigger_error('Error: Could not load template ' . $this->file . '!');
    endif;
}

Insights бросает обязательный:

Использование include() или require() обходит ленивую загрузку сторонних классов. Предпочитайте использование автозагрузки.

Эти файлы не являются классами, они не могут быть автоматически загружены.

Должен ли я просто игнорировать эти ошибки или есть среда с автозагрузкой, которую я могу настроить для ленивых загрузок неклассических файлов?

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

Любой совет будет принят во внимание.

  • 0
    Не могли бы вы предоставить структуру вашего файла? Где находятся файлы, имена и т. Д.
Теги:
composer-php

1 ответ

2
Лучший ответ

Следует ли игнорировать ошибки? Это зависит.

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

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

  1. Вы выполняете PHP-код для создания вашего шаблона. Хотя в этом нет ничего плохого (PHP был создан как механизм шаблонов), функция действительно не справляется с ошибками PHP, которые могут возникнуть - предполагается, что код будет выполняться просто отлично.
  2. Обработка ошибок, выполняемая trigger_error() также не может быть протестирована простым способом. Лучшим способом информирования объектно-ориентированной программы об ошибках было бы исключение.

Поэтому, если вы используете статический анализ кода Sensio для обнаружения ошибок в своей архитектуре, я бы сказал, что он нашел в вашем коде что-то самоуверенное.

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

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

  • 0
    Я не использую тестирование PHPUnit, так что это не проблема. Я никогда не видел смысла писать php-код для тестирования php-кода. Как проверить тестовый код? У меня есть несколько хороших вариантов шаблона, так что спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню