为什么我不能使用这样的代码?
<?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**
例如. Java类具有默认值,没有args构造函数.即使没有明确定义也可以调用它.
当我们从父类中删除args构造函数时,PHP行为可能会导致麻烦,例如.当我们认为它不再需要了.
有没有人知道为什么PHP创建者这样做?
Java classes have default,no args constructor.
Does anyone know why PHP creators made it this way?
Java是一种计划语言.经过严格的考虑和正式的规定.为了简化向开发人员和实施者的简单性,旨在尽可能长时间地保持最小的变化.肯定没有达到他们希望的程度,但是您仍然可以使用Java 1.0代码,编译并在现代虚拟机上运行它.
PHP的设计师从来没有将语言设计成几乎这么极端.他们一起去弥补.无论好是坏,他们都会适度地将语言分开,并在下一个版本中重新构建语言.自从PHP 1和2以来,它的变化是无法确定的.即使是最近,在PHP 5中,对于对象来说,从副值到逐个引用语义也发生了巨大的变化.这是一个同样灿烂的方法,给我们带来了魔术报价,缺乏Unicode,不一致的命名(并经常重命名)的功能,以及一个甚至没有错误提示的解析器(即使使用error_reporting(-1);)也会快速解释数字字面值09为0.
PHP behavior can cause troubles when we remove no args constructor from parent class,eg. when we think it’s not needed any more.
你可以要求在bugs.PHP.net上进行更改,但是有可能会忽略它,或者让你忽略“抱歉,但是问题并不意味着PHP本身存在问题”.