在 __constructor
中包含逻辑是个好主意吗?
public class someClass
{
public function __construct()
{
//some logic here
}
到目前为止,我认为这很好;然而,this reddit comment提出相反的建议。
最佳答案
作为@Barry wrote ,其中一个原因与单元测试有关,但这只是一个副作用。
让我们以最坏的情况为例:你有一个“类”,它只有一个构造函数(你可能见过这样的例子)。那么......为什么它甚至被写成一个类?你不能改变它的状态,你不能要求它执行任何任务,你也没有办法检查它是否做了你想要的。您也可以使用线性文件并将其包含在内。这很糟糕。
现在举一个更合理的例子:假设你有一个类,它在构造函数中进行了一些验证检查,并在其中建立了一个新的数据库连接。然后它还有一些用于执行各种任务的公共(public)方法
最明显的问题是“建立新的数据库连接”——无法从类外部影响或阻止此操作。那个新的连接将开始做谁知道的事情(可能加载一些配置并试图抛出异常)。它还构成了一个隐藏的依赖项,如果不检查该类的代码,您将没有任何迹象。
代码也有类似的问题,它对传递的参数进行验证和/或转换。它构成了隐藏的逻辑(因此违反了 PoLA 。它还使您的类更难扩展,因为您可能希望保留该验证功能的一些,同时替换其他部分。而且您不需要没有那个选项。因为所有这些代码都会在您创建新实例时运行。
底线是这样的——构造函数中的逻辑被认为是一种“代码味道”。这不是致命的错误(比如在全局变量上使用 eval()
),但它是糟糕设计的标志。
关于php - 构造函数内部的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37144937/