gpt4 book ai didi

php - 构造函数内部的逻辑

转载 作者:可可西里 更新时间:2023-11-01 13:49:29 24 4
gpt4 key购买 nike

__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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com