2

构造函数或统一构造函数有什么区别。我有一个类,它有一个构造函数和一个统一的构造函数。当我初始化类的对象时,统一的构造函数调用为什么不是普通的构造函数。

<?php 

class test {

    function __construct() {
       print "In BaseClass constructor\n";
    }

    function test() {
        echo 'Class loeaded';                   
    }
}

$obj = new test();

?>

输出接口

在 BaseClass 构造函数中

PHP 版本 5.2.6

4

4 回答 4

2

自 PHP 5 起,在类中声明构造方法的最佳方式是使用标准化的

__construct()

所以如果你有

class myA {

  public function __construct() {
    echo "hello construct myA";
  }

  public function myA() {
    echo "hello basic way myA";
  }
}

$myA = new myA();

它会回响

hello construct myA

因为__constructor()有优先权

但是,出于兼容性原因,如果没有__construct()方法,旧方法可能会起作用。和:

class myA {

  //public function __construct() {
  //  echo "hello construct A";
  //}

  public function myA() {
    echo "hello basic way myA";
  }
}

$myA = new myA();

会给你:

hello basic way myA

在所有情况下,我建议您使用__construct()

于 2013-04-03T04:09:16.643 回答
1

旧的构造函数(具有类名的方法)仅出于兼容性原因而存在。因此,如果您在类 php 中有新的构造函数(__construct),就不会费心去调用旧的构造函数。

编辑

有趣的是,parent::__construct当被扩展的类只有旧的构造函数类型时调用仍然有效(它就像真正构造函数的别名)

于 2013-04-03T04:00:51.827 回答
1

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

阅读构造函数的文档(链接


类的实例是使用 new 关键字创建的。在 new 调用期间发生的情况是,为一个新对象分配了它自己在您请求的类中定义的属性的副本,然后调用该对象的构造函数,以防定义了一个。构造函数是一个名为 的方法__construct(),在创建对象后由 new 关键字自动调用。它通常用于自动执行各种初始化,例如属性初始化。构造函数也可以接受参数,在这种情况下,当编写 new 语句时,您还需要向构造函数发送括号之间的函数参数。

在 PHP 4 中__construct(),您必须使用类的名称定义一个方法,而不是用作构造函数的名称,例如 C++。这仍然适用于 PHP 5,但您应该为新应用程序使用新的统一构造函数命名约定。

在下面的类示例中,我们可以在新行中传递人的姓名:

class Person {

function __construct($name)

{

$this->name = $name;

}

function getName()

{

return $this->name;

}

private $name;

};

$judy = new Person("Judy") . "\n";

$joe = new Person("Joe") . "\n";

print $judy->getName();

print $joe->getName();

提示:因为构造函数不能返回值,所以在构造函数中引发错误的最常见做法是抛出异常。

于 2013-04-03T04:01:53.400 回答
1

根据文档从 PHP 5.3.3 开始,与类同名的方法将不再被视为构造函数.. 它们就像常规方法...

 <?php

 class myclass 
  {
     public function myclass() 
    {
    // treated as constructor in PHP 5.3.0-5.3.2
    // treated as regular method as of PHP 5.3.3
    }
   }
     ?>

`

为了向后兼容,如果 PHP 5 找不到给定类的 __construct() 函数,并且该类没有从父类继承一个,它将按类的名称搜索旧式构造函数。

这意味着如果你有构造函数 myclass() 和 __construct .. 那么 __construct 将首先被搜索并作为构造函数而不是 myclass()

         class myclass 
          {
             public function myclass() 
            {
               echo 'hello';
            }

            function __construct() {
               print "new constructor"
           }

           }
     $obj = new myclass();  // will echo new constructor
于 2013-04-03T04:02:16.743 回答