Запись выходных данных в функции класса - это то, что я не должен делать?

В последнее время я пытаюсь адаптироваться к стандарту PSR. В документе PSR-1 указано, что:

Файлы ДОЛЖНЫ либо объявлять символы (классы, функции, константы и т. Д.), Либо вызывать побочные эффекты (например, генерировать выходные данные, изменять настройки.ini и т. Д.), Но НЕ ДОЛЖНЫ делать и то, и другое.

Означает ли это, что запись вывода (скажем, echo '<b>some bold text</b>';) в функции, которая находится в классе, что я не должен делать?

2 ответа

Решение

Это не то, что это значит.

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

Если вы 1) include файл, а затем 2) явно вызвать функцию, которая производит побочный эффект, это прекрасно. В противном случае весь код, который создает побочные эффекты, не может быть написан в классах или функциях, что просто бессмысленно.

Подводя итог с примерами.

Плохой пример (смешанный)

<?php

namespace Foo;

class Bar
{
  // ...
}

?>
<b>some text here</b>

Хороший пример № 1 (объявление класса)

<?php

namespace Foo;

class Bar
{
  // ...
}

Хороший пример № 2 (шаблон)

<b>some text here</b>
<?php echo "hello world"; ?>
Другие вопросы по тегам