【问题标题】:Why is child class not calling constructor of parent class?为什么子类不调用父类的构造函数?
【发布时间】:2015-04-24 16:49:28
【问题描述】:

来自 php.net

如果子类没有定义构造函数,那么它可以像普通类方法一样从父类继承(如果它没有声明为私有)。

据我了解,如果我不在孩子中定义构造函数,则会调用父构造函数。

例如,我创建了一个带有构造函数的父类。实例化了子类和父类,但是它会引发以下警告: 警告:vehicle::__construct() 缺少参数 1

示例代码:

class vehicle{
    protected $type;
    function __construct($type){
        $this->type = $type;
        echo "Type chosen: $this->type";
    }
}

class car extends vehicle{

}

$vehicle = new vehicle("sport");
$car = new car;

【问题讨论】:

  • 因为 vehicle 在其构造函数中有一个 mandatory 参数,这意味着 car 具有相同的强制参数.....但是您正在尝试实例化car 没有那个参数,所以它调用父构造函数并给你一个错误,因为你在尝试实例化它时没有传递那个参数
  • 您希望发生什么?
  • @axiac 我认为它会自动调用父构造函数而不会抛出错误,因为我已经为父构造函数提供了参数
  • $car = new car; 构造函数的参数在哪里?
  • 您没有向父构造函数提供 any 参数.....只是因为您实例化了父类型的 one 对象已经,并不意味着该父级的所有其他实例,或从该父级继承的将继承该值.....继承的是,而不是实例

标签: php inheritance constructor


【解决方案1】:

嗯,它正在调用父类的构造函数。由于您没有为构造函数提供任何参数,因此当您声明 $car 对象时,它会警告您缺少参数。

您应该通过提供“类型”参数来初始化子类对象,如下所示:

$car = new car("family");

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 2011-09-07
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多