我是面向对象编程的新手,并为PHP应用程序编写了一些我的第一个类。
在一些较简单的类中,我声明了一个function __construct()
,并在该函数内部调用某些类方法。在某些情况下,我发现自己在我的应用程序中实例化了这个类,并且不需要对结果对象做任何事情,因为类__construct()
调用了方法,这些方法完成了他们的工作,让我没有任何与该类有关的事情。
这对我来说感觉不对。看起来很傻,我有一个我从不做任何事情的新对象。
同样,我会强调这只是我的一些更简单的类的情况。在更复杂的,我通过对象和__construct()
之外使用类方法。
我是否需要重新思考编码方式,或者我还好吗?
答案 0 :(得分:4)
好吧,构造函数用于创建类的新实例,并在该类上进行任何必要的设置。如果你只是创建课程并离开它,这似乎有点浪费。例如,为什么不使用类中的静态函数作为组织工具并只调用它们(或调用它们的函数)而不是构造一个你永远不会使用的新实例?
答案 1 :(得分:2)
这对我来说感觉不对。看起来很傻,我有一个我从不做任何事情的新对象。
是的,那会引起一面红旗。
一般来说,你不应该让施工人员有任何副作用;它们用于初始化对象的状态 - 而不是用于其他任何东西。这条规则当然有例外,但总的来说它是一个很好的指导方针。您还应该避免在构造函数中进行任何繁重的计算。将其移到方法上。
Side effects有很多东西 - 全局变量或静态(类)变量的变化;输出到环境(例如调用print()
,header()
或exit()
);调用数据库或其他外部服务,甚至更改其他对象的状态。
副作用自由函数也称为“纯”函数 - 与过程相反,过程是一种具有副作用的函数。明确地将纯函数与过程分开是一种很好的做法(甚至可能将它们标记为这样)。