为什么PHP没有默认构造函数?

paq*_*q85 14 php constructor default-constructor

为什么我不能使用这样的代码?

<?php

class NoConstructor {
}

class ChildWithConstructor extends NoConstructor {
    public function __construct() {
        parent::__construct();
        // do something
    }
}

$foo = new ChildWithConstructor();
// **Fatal error: Cannot call constructor in file.php on line 8**
Run Code Online (Sandbox Code Playgroud)

例如.Java类有默认值,没有args构造函数.即使没有明确定义,也可以调用它.

当我们从父类中删除没有args构造函数时,PHP行为会导致麻烦,例如.当我们认为不再需要它时.

有谁知道为什么PHP创建者这样做了?

Boa*_*ann 22

Java类有默认值,没有args构造函数.

有谁知道为什么PHP创建者这样做了?

Java是一种计划好的语言.从一开始就严格考虑并正式指定.为了简化开发人员和实现人员,它旨在尽可能长时间地进行最小的更改以实现向后和向前兼容性.绝对没有达到他们希望的程度,但你仍然可以使用Java 1.0代码,编译它并在现代VM上运行它.

PHP的设计人员从未将语言计划得如此极端.他们随着时间的推移弥补起来.无论好坏,他们都愿意将语言分开,并在下一版本中重建它.自从PHP 1和2以来,它发生了无法识别的变化.即使是最近,在PHP 5中,您仍然从对象的by-value到by-reference语义发生了巨大的变化.正是这种同样出色的方法为我们带来了神奇的引用,缺少Unicode,不一致命名(和经常重命名)的函数,以及一个甚至没有一点错误(即使有error_reporting(-1);)的解析器,将快乐地将数字文字解释090.

当我们从父类中删除没有args构造函数时,PHP行为会导致麻烦,例如.当我们认为不再需要它时.

您可以在bugs.php.net上请求更改,但很可能他们会忽略它或者用"抱歉,但你的问题并不意味着PHP本身存在问题......".