我在PHP中发现了一个错误,或者我错过了什么?

kil*_*129 -3 php constructor php4

可能重复:
为什么即使类和构造函数的情况不同,我的构造函数仍然被调用?

<?php
 abstract class foo {
  function foof() {
   echo "Hello, I'm foo :)";
  }
 }

 class foo2 extends foo {
  function foo2f() {
   $this->foof();
  }
 }

 class foo3 extends foo2 {
  function foo3f() {
   $this->foo2f();
  }
 }

 $x = new foo3;
 $x->foo3f();
?>
Run Code Online (Sandbox Code Playgroud)

这段代码输出"Hello,I'm foo :)"(正如预期的那样),但当我将代码改为这样的代码时:http://pastebin.com/wNeyikpq

<?php
abstract class foo {
 function fooing() {
  echo "Hello, I'm foo :)";
 }
}

class foo2 extends foo {
 function foo2() {
  $this->fooing();
 }
}

class foo3 extends foo2 {
 function foo3() {
  $this->foo2();
 }
}

$x = new foo3;
$x->foo3();
?>
Run Code Online (Sandbox Code Playgroud)

PHP打印:

你好,我是foo :)你好,我很好:)

为什么?这是一个错误吗?

小智 8

因为您呼叫的foo2的两倍,function foo2()foo2它的构造函数.

  • _Note for passersby_:与其类同名的方法被视为向后兼容PHP4的构造函数.从PHP5开始,您应该使用[`__construct()`](http://php.net/manual/en/language.oop5.decon.php)方法. (6认同)