Php 构造函数到底应该包含什么?

Php 构造函数到底应该包含什么?,php,constructor,Php,Constructor,我正在构建一个scraper,目前我的解析类有大约100行构造函数,可以激发类中包含的大约10个方法和一些其他第三方组件代码 所有这些方法都主要解析原始html并将最终值分配给类AttAttributes 构造函数是放置此代码的正确位置吗?如果不是,如果我想在类实例化时执行它,它应该去哪里 在构造函数中工作已经不是那么糟糕了,不过为了代码的可读性和整洁性,您可以将特定的功能分解为不同的方法。然后,您可以直接从构造函数调用它们,或者在实例化类之后更好地调用它们。它还将使代码在将来更可用,因此,如果

我正在构建一个scraper,目前我的解析类有大约100行构造函数,可以激发类中包含的大约10个方法和一些其他第三方组件代码

所有这些方法都主要解析原始html并将最终值分配给类AttAttributes


构造函数是放置此代码的正确位置吗?如果不是,如果我想在类实例化时执行它,它应该去哪里

在构造函数中工作已经不是那么糟糕了,不过为了代码的可读性和整洁性,您可以将特定的功能分解为不同的方法。然后,您可以直接从构造函数调用它们,或者在实例化类之后更好地调用它们。它还将使代码在将来更可用,因此,如果在实例化类时需要使用其中一个方法,它不会在构造函数中完成所有操作,并且只能调用所需的方法

我通常不赞成在类实例化上做一些事情。设置变量&一个环境很好,但是我把工作留给了其他方法。如果您经常需要它,可以创建一个方便的函数/方法来实现这一点:实例化对象,然后调用所需的函数。100是很长的路。如果它执行多个操作,则将它们拆分为它们自己的(可能是私有/受保护的)函数,如果它包含多个If/switch语句,则可能存在多态性。我的一般经验法则(当然也有例外)是函数应该<20行。@Wrikken在某些情况下,在
\u构造
函数中发生某些事情是可以接受的。示例:
\uuu construct(){session\u start()}
@DarylGill:是的,有例外,它不是100%。然而,这与它在适当的地方有很大关系。例如,以您的
session\u start()
为例,我不希望它出现在
new Calendar
中,我可以在
new SomeController()
中允许它,我完全希望它出现在专用的
new session
对象中。例如,在这种情况下,如果一个理论上的
日历
对象需要一个会话,我宁愿定义一个
会话
专用类/对象,并要求
日历
的构造函数中有一个
会话
对象来明确这一点(
函数u构造(会话$session){..etc code>),定义只有一个目标的小型、孤立的函数,可以更容易地利用继承来创建一个仅在所需部分中表现不同的对象,而无需重新实现/复制/粘贴大部分原始函数。