我试图理解一个PHP OOP概念,假设我有两个类A和B. B扩展A那里A是Base / Parent类。如果A类有一个__construct类,B会自动继承它......?
示例:
class Car
{
public $model;
public $price;
public function __construct()
{
$this->model = 'BMW';
$this->price = '29,00,00';
}
}
class Engine extends Car
{
parent::__construct();
}
按parent::__construct();
类引擎会自动执行Car __construct();
吗?
但我总是如果我从父类继承,__construct
将自动执行,为什么我会添加这个parent::__construct()
?
答案 0 :(得分:2)
当一个类extends
另一个时,它继承了它的所有方法。是的,包括构造函数。您只需执行class Engine extends Car {}
,Engine
将拥有一个构造函数以及Car
中定义的所有其他属性和方法(除非他们重新private
,我们就是&#39} ;我会忽略这里。)
如果您定义Car
Engine
中已存在的同名方法,则覆盖该方法实施。这听起来完全是这样的:而不是 Car
的实现,Engine
的方法被调用。
为什么要添加此
parent::__construct()
?
如果您覆盖某个方法,但也想要调用父代的实现。 E.g:
class Engine extends Car {
public function __construct() {
parent::__construct();
echo 'Something extra';
}
}
答案 1 :(得分:0)
覆盖子类中的构造函数就是这样,覆盖 ...您正在为子项设置新的构造函数,以替换父构造函数,因为你希望它做一些不同的事情,通常你也不希望它调用父构造函数.....这就是你需要从子构造函数显式调用父构造函数的原因希望他们两人都被执行。
如果您没有创建子构造函数,那么您不会覆盖父构造函数,因此将执行父构造函数