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);)的解析器,将快乐地将数字文字解释09为0.
当我们从父类中删除没有args构造函数时,PHP行为会导致麻烦,例如.当我们认为不再需要它时.
您可以在bugs.php.net上请求更改,但很可能他们会忽略它或者用"抱歉,但你的问题并不意味着PHP本身存在问题......".