请看下面的代码:
01. class Test {
02. public function __construct($param1, $param2, $param3) {
03. echo $param1.$param2.$param3;
04. }
05. }
06.
07. $params = array('p1','p2','p3');
08.
09. $ob = new Test;
10.
11. if(method_exists($ob,'__construct')) {
12. call_user_func_array(array($ob,'__construct'),$params);
13. }
现在,问题是在第 09 行调用了 构造函数
但我想在第 11-13 行 手动 调用它
是否可以?如果可以该怎么办?有什么 建议吗 吗?
原文由 A.N.M. Saiful Islam 发布,翻译遵循 CC BY-SA 4.0 许可协议
构造对象时无法阻止调用构造函数(代码中的第 9 行)。如果在您的
__construct()
方法中发生了一些您希望推迟到构建之后发生的功能,您应该将其移至另一个方法。该方法的一个好名字可能是init()
。为什么不这样做呢?
编辑:我只是想到了一种可以防止构造函数被调用(某种程度上)的 hacky 方法。您可以子类
Test
并用一个空的、什么都不做的构造函数覆盖构造函数。如果您正在处理一些由于某种原因无法更改的代码并且需要解决编写不当的构造函数的一些烦人行为,这可能是有意义的。