gpt4 book ai didi

PHP[OOP] - 如何手动调用类构造函数?

转载 作者:可可西里 更新时间:2023-10-31 22:06:21 26 4
gpt4 key购买 nike

请看下面的代码:

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 行手动调用它

这可能吗?如果那怎么办?有什么想法吗?

最佳答案

不可能在构造对象时阻止调用构造函数(您的代码中的第 9 行)。如果在您的 __construct() 方法中发生了一些您希望推迟到构建之后发生的功能,您应该将其移至另一个方法。该方法的一个好名字可能是 init()

为什么不这样做呢?

class Test {
public function __construct($param1, $param2, $param3) {
echo $param1.$param2.$param3;
}
}

$ob = new Test('p1', 'p2', 'p3');

编辑:我只是想到了一种可以防止构造函数被调用(某种程度上)的 hacky 方法。您可以子类化 Test 并使用空的、什么都不做的构造函数覆盖构造函数。

class SubTest extends Test {
public function __construct() {
// don't call parent::__construct()
}

public function init($param1, $param2, $param3) {
parent::__construct($param1, $param2, $param3);
}
}

$ob = new SubTest();
$ob->init('p1', 'p2', 'p3');

如果您正在处理一些由于某种原因无法更改的代码,并且需要解决编写不当的构造函数的一些烦人行为,这可能是有意义的。

关于PHP[OOP] - 如何手动调用类构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1899299/

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