实例化派生类时是否隐式调用抽象类构造函数?

2024-01-23

举个例子:

abstract class Base {
    function __construct() {
        echo 'Base __construct<br/>';
    }
}

class Child extends Base {
    function __construct() {
        echo 'Child __construct<br/>';
    }
}

$c = new Child();   

来自 C# 背景,我期望输出是

基础 __construct
子 __construct

然而,实际输出只是

子 __construct


不,如果子类定义了构造函数,则不会调用父类的构造函数。

从子类的构造函数中,您必须调用父类的构造函数:

parent::__construct();

如果需要的话,传递参数。

通常,您将在子类的构造函数的开头、任何特定代码之前执行此操作;这意味着,就您而言,您将拥有:

class Child extends Base {
    function __construct() {
        parent::__construct();
        echo 'Child __construct<br/>';
    }
}


并且,作为参考,您可以查看 PHP 手册的此页面:构造函数和析构函数 http://php.net/manual/en/language.oop5.decon.php- 它指出(引用) :

Note:如果子类的构造函数不会被隐式调用 定义一个构造函数。
为了 运行父构造函数,调用parent::__construct()内 需要子构造函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实例化派生类时是否隐式调用抽象类构造函数? 的相关文章

随机推荐

  • Bootstrap 轮播上的动画高度变化 (v2.3.2)

    我正在尝试使用 Bootstrap 的轮播来处理高度不同的内容 高度会根据浏览器宽度而有所不同 并且轮播下方有内容 我想使用 CSS 来动画幻灯片之间的高度变化 在朋友的帮助下 我几乎可以在 FireFox 中实现此功能 第一张幻灯片跳转
  • 从 Cognito 触发器发送消息

    我想限制用户从 Cognito 托管的 UI 登录 我可以看到有触发器可以附加 lambda 但是每当我更改 lambda 内部的事件对象时 而不是获取自定义消息User exceeded limits I get unrecognizab
  • 如何像屏保一样改变CAGradientLayer的颜色?

    我被创造了UIView与申请CAGradientLayer颜色效果如我所附图片所示 现在 我想像屏幕保护程序一样平滑地改变它的渐变颜色从上到下的变化 我已经尝试过使用NStimer有点完成了 但它的颜色在改变CAGradientLayer看
  • 智能 JVM 和 JIT 微优化

    随着时间的推移 Sun 的 JVM 和 JIT 已经变得相当智能 过去作为必要的微优化而成为常识的事情不再需要 因为它会为您处理好 例如 过去的情况是 您应该将所有可能的类标记为 Final 以便 JVM 内联尽可能多的代码 然而现在 JI
  • C# 线程,WaitHandle.WaitAll

    是否可能不使用 WaitHandle WaitAll waitHandles 阻止 winForm 而只是设置另一个线程 当从 WaitHandle WaitAll 获取 complate 信号时将触发该线程 我不会使用WaitHandle
  • 使用 JavaScript 从对象中递归删除属性和值的最快方法是什么?

    我需要找到最快的方法来删除所有 meta对象的属性及其值 例如 part one name My Name something 123 meta test test123 part two name name dob dob meta so
  • Android PDF页面转图像api

    有没有可能的方法将 pdf 转换为图像并在图像视图上显示它们 PDF 不是由图像组成 而是由矢量组成 T Couple 开源 Java PDF 到图像转换器 例如 http www jpedal org http www jpedal or
  • 当所述列的值为 NULL 时,我在可空列上使用 JSON_extract 函数的 where 语句是否得到确认?

    我有一个 where 语句 其中包含 JSON extract 方法 JSON extract 使用一个名为的可为空列new value or old value 如果列包含 JSON 字符串 则该检查有效 但当列为 NULL 时 wher
  • jsf/primefaces 在 bean 初始化期间加载指示器

    在我的 JSF Primefaces 项目中 我在 bean 的 init 构造后 方法中加载了大量数据 这就是为什么我想在 Bean 加载期间显示 gif 指示器 我尝试使用 primefaces 和 Ajax 状态 展示的程序化版本 h
  • 无需 Web 界面即可在 Drupal 中切换主题

    我正在学习 php 和创建主题 不幸的是 当我编辑当前在 drupal 中使用的主题时 我在主题中犯了一个错误 即使我点击 drupal index php 也不会再显示任何内容 我想将损坏的 drupal 主题更改为可用的主题 但我无法这
  • Angular ngFor ngIF 通过管道过滤数据的条件

    ngFor 基于使用管道的搜索进行过滤 这工作正常 现在我必须根据搜索查询添加 ngIf 条件 如果没有任何结果 那么我必须显示另一个带有 无数据 文本的新 div
  • 设置STS但在web应用程序中保留formsauthentication

    我正在现有的网络应用程序上启用 Windows 身份基础 我希望尽可能少地干扰现有代码 因此我希望登录页面使用应用程序中留下的表单验证 并且如果用户通过特定页面 例如 im comming from some other site aspx
  • 使用 CDK 创建自定义 AWS IAM 策略

    根据文档 https docs aws amazon com cdk api latest docs aws cdk aws iam Policy html https docs aws amazon com cdk api latest
  • 验证 C 程序的输入

    我有一个 C 程序 其中接受 2 个数字作为输入 如何验证输入的内容是否仅为数字而不是字符 void main int a b printf Enter two numbers scanf d d a b printf Number 1 i
  • 将 IronPython 嵌入到我的 C# 应用程序中的最佳方式是什么?

    我有一个由非常精通技术的人使用的应用程序 他们想要可编程性的小岛 所以我使用了嵌入式 Iron Python 然而 自 IronPython 2 0 Eval 起不再起作用 具体来说 我无法同时加载模块和注入局部变量 有一个解决办法 我仍然
  • 如何查询Win32_PerfFormattedData_Tcpip_NetworkInterface中的特定适配器?

    如何查询特定适配器 最好基于 IP 地址 Win32 PerfFormattedData Tcpip NetworkInterface 我花了一段时间谷歌搜索这个问题 但没有找到解决方案 我尝试使用Win32 NetworkAdapter
  • 如何在Python程序中处理操作系统信号?

    我正在编写一个 python 程序 它通过无限 while 循环从队列中读取数据 我如何处理操作系统 键盘中断 CTRL C 发送的信号以打破 while 循环并关闭活动连接和文件并优雅地退出程序而不是终止进程 while True rea
  • SQLSTATE[HY093]:参数号无效:参数未定义

    我使用 Yii 的活动记录模式已经有一段时间了 现在 我的项目需要访问不同的数据库来进行一项小事务 我认为 Yii 的 DAO 对此很有帮助 但是 我遇到了一个神秘的错误 CDbCommand 执行 SQL 语句失败 SQLSTATE HY
  • 使用翻转过渡更改 leftBarButtonItem?

    在我的代码中 我以编程方式将带有 UIButton 的 leftBarButtonItem 更改为 UIActivityIndi catorView 我想知道如何在更改时执行翻转过渡 有什么想法吗 多谢 嗯 我有一种感觉 要做翻转过渡 你需
  • 实例化派生类时是否隐式调用抽象类构造函数?

    举个例子 abstract class Base function construct echo Base construct br class Child extends Base function construct echo Chil