php是调用每个方法时调用的构造函数吗?

时间:2014-09-01 11:06:26

标签: php

每次在类中运行方法时都会调用__construct方法吗?例如:

class SomeClass {
    function __construct() {
      // do something
    }

    function a() {
       // do something for a
    }
}

所以当我打电话给班级时

$class = new SomeClass();

我相信构造函数是运行的吗?但是当我做以下事情的时候怎么样:

echo $class->a();

此时构造函数是否再次运行?

4 个答案:

答案 0 :(得分:5)

否。如上所述here

  

具有构造函数方法的类在每个上调用此方法   新创建的对象,因此它适用于任何初始化   该对象在使用之前可能需要

最后,只有在创建对象时才会隐式调用构造函数。所以在你的例子中:

$class = new SomeClass();
//       ^ triggers constructor
echo $class->a()
//       ^ not triggering constructor but have to be initialized before usage

答案 1 :(得分:3)

正如名称“构造函数”应该建议的那样,只有在创建对象实例时才会隐式调用它,而不是每个方法调用,因此这里的答案是 NO

您可以在此处找到相关文档:http://php.net/manual/en/language.oop5.decon.php

正如ClémentMalet建议的那样,您可以通过在任何方法中添加$this->__construct();来自行调用它!

如果您希望在不创建实例的情况下调用类的方法,则它必须是static方法,请参阅http://php.net/manual/language.oop5.static.php

答案 2 :(得分:2)

答案是。构造函数方法在类实例化时自动调用。

见这个例子:

<?php

Class Test{

    public function __construct(){
        echo "Construct called" . PHP_EOL;
    }

    public function a_method(){
        echo "Running Method" . PHP_EOL;
    }

}

$a = new Test();
$a->a_method();

输出:

  

构建名为

     

跑步方法

PHP Documentation

中的更多信息

答案 3 :(得分:1)

,不会再次调用构造函数方法(在方法调用中)。

例如,我们有以下代码;

<?php

class foo {

 public function __construct() {
     echo "Construct has been called". PHP_EOL;
 }

 public function a() {
     echo "a has been called" . PHP_EOL;
 }

}

//Now we have echo's within each method, when called, something will output.

$objFoo = new foo();

$objFoo->a();
  • 我们有两种方法__construct()a()
    • 一旦调用,两者都会回显输出。
  • 我们有2个电话
    • 一个实例化课程
    • 一个致电a()

当我们run the code时,我们得到以下输出;

  

构造被称为

     

a被称为

我们有2个单独的调用,明确__construct()a(),只有2行输出 - 两者都是预期的,因为__construct()仅被调用一次,所以不会有更多 - {{ 1}}。

查看文档;