Php 名为`start()`的方法在对象初始化时不调用就执行

Php 名为`start()`的方法在对象初始化时不调用就执行,php,Php,我正在编写cli应用程序,所以我用几个方法创建了主类,其中一个名为start。要简化: class Foo{ ... public function start(){ echo "Let's start!"; ... } } 要运行我的应用程序,我实例化Foo类的新对象并调用start方法: 我注意到,start是在对象构造上执行的,即使Foo类中没有构造方法。真奇怪 从终端输出: $ php start.php Let's start! Let

我正在编写cli应用程序,所以我用几个方法创建了主类,其中一个名为start。要简化:

class Foo{

   ...

   public function start(){
      echo "Let's start!";
      ...
   }

}
要运行我的应用程序,我实例化Foo类的新对象并调用start方法:

我注意到,start是在对象构造上执行的,即使Foo类中没有构造方法。真奇怪

从终端输出:

$ php start.php
Let's start!
Let's start!

start代表PHP的神奇方法之一吗?我使用的是PHP5.5。

在旧式PHP4中,构造函数没有命名为u-construct,而是类的名称。例如:

class Start {

    function start() {
        // I am the constructor
    }

}
PHP5仍然支持这种遗留行为,如果不存在构造函数,则寻找与类同名的方法


在旧式PHP4中,构造函数不是名为_construct,而是类的名称。例如:

class Start {

    function start() {
        // I am the constructor
    }

}
PHP5仍然支持这种遗留行为,如果不存在构造函数,则寻找与类同名的方法


您有一个名为Foo的方法吗?我无法在PHP5.4上重现这一点。最初,这个类被命名为Start,以及我所询问的方法。我在清单中更改了这一点,以获得更可读的代码。您是否建议它与以下内容有关:如果类名==方法名,则该方法被称为构造函数?是否有名为Foo的方法?我无法在PHP5.4上重现这一点。最初,这个类被命名为Start,以及我所询问的方法。我在清单中更改了这一点,以获得更可读的代码。你是否认为它与:如果类名==方法名,那么该方法被称为构造函数有关?你比我强得多!当我看到OP的评论时,我正要回答,但是这个问题突然出现了一个新的答案。你打败了我!当我看到OP的评论时,我正要回答,但是这个问题突然出现了一个新的答案。