PHP:如何将子类__construct()参数传递给父级::__construct()?

2022-08-30 10:51:08

我有一个PHP类,如下所示:

class ParentClass {
    public function __construct($arg) {
        // Initialize a/some variable(s) based on $arg
    }
}

它有一个子类,如下所示:

class ChildClass extends ParentClass {
    public function __construct($arg) {
        // Let the parent handle construction. 
        parent::__construct($arg); 
    }
}

如果由于某种原因,ParentClass需要更改以采用多个可选参数,我希望我的Child类提供“以防万一”,该怎么办?除非我重新编码 ChildClass,否则它只会将一个参数传递给构造函数,并且只会传递该参数。

这是否如此罕见或如此糟糕的做法,以至于通常的情况是,ChildClass不需要从采用不同参数的ParentClass继承?

从本质上讲,我已经在Python中看到过,你可以通过“args”是某种数组/可迭代的数组传递给函数,从而将可能未知数量的参数传递给函数。PHP中是否存在类似的东西?或者我应该在继续之前重构这些类吗?somefunction(*args)


答案 1

这可以在 PHP >= 5.6 中完成,而无需使用 ...(splat) 运算符call_user_func_array()

public function __construct()
{
    parent::__construct(...func_get_args());
}

答案 2

在php中有这样的东西,虽然有点冗长:

$args = func_get_args();
call_user_func_array(array($this, 'parent::__construct'), $args);

推荐