在 class 的函数中写输出是我不应该做的?

Writing output in a function of a class is what I should not do?

最近在努力适应PSR标准。在 PSR-1 document 上声明:

Files SHOULD either declare symbols (classes, functions, constants, etc.) or cause side-effects (e.g. generate output, change .ini settings, etc.) but SHOULD NOT do both.

这是否意味着我不应该在 class 中的函数中写入输出(比如说 echo '<b>some bold text</b>';)?

不是那个意思

它指的是当您 include 这些文件时发生的事情。 include 'foo.php'的结果应该或者是已经创建的一堆新符号(类、函数、常量),或者 发生了一些副作用(添加了自动加载器,生成了 HTML 输出,或者通常 发生了一些事情 )。这两件事不应该混在一起,因为您经常希望加载 类 而不会造成一些不可避免的副作用。

如果您 1) include 文件,然后 2) 显式调用会产生副作用的函数,那完全没问题。否则所有产生副作用的代码都不能写成类或函数,简直是无稽之谈。

举个例子总结一下。

不好的例子(混合)

<?php

namespace Foo;

class Bar
{
  // ...
}

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

好例子 #1(class 声明)

<?php

namespace Foo;

class Bar
{
  // ...
}

好例子 #2(模板)

<b>some text here</b>
<?php echo "hello world"; ?>