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()时,我预计会出现错误。请编辑答案以提供进一步解释