在 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"; ?>
最近在努力适应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"; ?>