Php 在子类中调用父构造函数
有人能解释一下为什么这个代码是有效的吗Php 在子类中调用父构造函数,php,class,oop,constructor,parent,Php,Class,Oop,Constructor,Parent,有人能解释一下为什么这个代码是有效的吗 <?php class iParent { private $device; private $browser; public function __construct() { $this->device = 'iPad'; $this->browser = 'Safari'; } public function getDetails() {
<?php
class iParent
{
private $device;
private $browser;
public function __construct()
{
$this->device = 'iPad';
$this->browser = 'Safari';
}
public function getDetails()
{
return 'Device ' . $this->device . ' ' . 'Browser ' . $this->browser;
}
}
/**
*
*/
class iParentChild extends iParent
{
public function __construct()
{
echo 'IParentChild constructor';
}
public function display()
{
return $this->getDetails();
}
}
$obj = new iParentChild;
echo $obj->display();
// Output
Device iPad Browser Safari
如果iParentChild类未定义\u构造
,则它将从其超类iParent继承该类。如果它确实定义了\uuu构造
,那么它将覆盖父级的构造函数,因此,正如您在问题中所述,需要调用父级::\uu构造()
编辑
请注意,即使iParentChild在不调用父构造函数的情况下重写了\u构造
,本例中也不会出现错误。这是因为php在使用变量的上下文中提供了变量的默认初始化,在这里它们被用作字符串。在实践中,最好不要依赖这一点:
:
在PHP中不需要初始化变量,但它是一个
非常好的做法。未初始化变量的默认值为
它们的类型取决于使用它们的上下文-布尔值
默认为FALSE,整数和浮点默认为零,字符串(例如。
在echo中使用)设置为空字符串,数组变为空字符串
数组
依赖未初始化变量的默认值是
在将一个文件包含到另一个使用
相同的变量名。这也是一个重大的安全风险
已打开寄存器\全局。如果发生以下情况,将发出E_通知级别错误:
使用未初始化的变量,但在
将元素追加到未初始化的数组。isset()语言
构造可用于检测变量是否已被删除
初始化
试图在未初始化的成员对象上调用方法可能会导致错误。究竟是什么原因造成混淆?您没有指定iParentChild
构造函数,因此它继承父类的构造函数。就这么简单。请查看更新版本。我在iParentChild中添加了_构造,但仍然没有收到任何错误。我复制了您的代码,得到的输出如预期的那样是:iParentChild构造函数设备浏览器是,但现在我在iParentChild中有了构造函数。在父构造函数未初始化的情况下执行此->getDetails()时,我预计会出现错误。请编辑答案以提供进一步解释