首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:如何将子类__construct()参数传递给parent::__construct()?

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

Stack Overflow用户
提问于 2009-10-21 20:38:30
回答 7查看 33.3K关注 0票数 48

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

代码语言:javascript
复制
class ParentClass {
    public function __construct($arg) {
        // Initialize a/some variable(s) based on $arg
    }
}

它有一个子类,因此:

代码语言:javascript
复制
class ChildClass extends ParentClass {
    public function __construct($arg) {
        // Let the parent handle construction. 
        parent::__construct($arg); 
    }
}

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

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

本质上,我在Python中看到,您可以通过somefunction(*args)向函数传递可能未知数量的参数,其中'args‘是某种类型的数组/可迭代。中存在这样的东西吗?还是应该在继续之前重构这些类?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-10-21 20:44:08

在php中有类似的内容,尽管有些冗长:

代码语言:javascript
复制
$args = func_get_args();
call_user_func_array(array($this, 'parent::__construct'), $args);
票数 34
EN

Stack Overflow用户

发布于 2017-04-12 18:46:13

这可以在PHP 5.6中通过使用>=实现,而无需call_user_func_array()

代码语言:javascript
复制
public function __construct()
{
    parent::__construct(...func_get_args());
}
票数 63
EN

Stack Overflow用户

发布于 2013-02-18 22:36:18

如果得到php嵌套限制错误,请尝试如下:

代码语言:javascript
复制
$args = func_get_args();
call_user_func_array(array('parent', '__construct'), $args);
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1603469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档