在设计类时正确使用'construct'

时间:2009-05-15 03:56:47

标签: php oop

我是面向对象编程的新手,并为PHP应用程序编写了一些我的第一个类。

在一些较简单的类中,我声明了一个function __construct(),并在该函数内部调用某些类方法。在某些情况下,我发现自己在我的应用程序中实例化了这个类,并且不需要对结果对象做任何事情,因为类__construct()调用了方法,这些方法完成了他们的工作,让我没有任何与该类有关的事情。

这对我来说感觉不对。看起来很傻,我有一个我从不做任何事情的新对象。

同样,我会强调这只是我的一些更简单的类的情况。在更复杂的,我通过对象和__construct()之外使用类方法。

我是否需要重新思考编码方式,或者我还好吗?

2 个答案:

答案 0 :(得分:4)

好吧,构造函数用于创建类的新实例,并在该类上进行任何必要的设置。如果你只是创建课程并离开它,这似乎有点浪费。例如,为什么不使用类中的静态函数作为组织工具并只调用它们(或调用它们的函数)而不是构造一个你永远不会使用的新实例?

答案 1 :(得分:2)

  

这对我来说感觉不对。看起来很傻,我有一个我从不做任何事情的新对象。

是的,那会引起一面红旗。

一般来说,你不应该让施工人员有任何副作用;它们用于初始化对象的状态 - 而不是用于其他任何东西。这条规则当然有例外,但总的来说它是一个很好的指导方针。您还应该避免在构造函数中进行任何繁重的计算。将其移到方法上。

Side effects有很多东西 - 全局变量或静态(类)变量的变化;输出到环境(例如调用print()header()exit());调用数据库或其他外部服务,甚至更改其他对象的状态。

副作用自由函数也称为“纯”函数 - 与过程相反,过程是一种具有副作用的函数。明确地将纯函数与过程分开是一种很好的做法(甚至可能将它们标记为这样)。