php中构造函数和统一构造函数之间的区别

时间:2013-04-03 03:56:36

标签: php

构造函数或统一构造函数是否有任何区别。我有一个具有构造函数和统一构造函数的类。当我初始化类的对象然后统一构造函数调用为什么不是正常的构造函数。

<?php 

class test {

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

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

$obj = new test();

?>

OUTPUI

在BaseClass构造函数

PHP Version 5.2.6

4 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

旧的构造函数(带有类名的方法)仅出于兼容性原因。所以,如果你在类中有新的构造函数(__construct),那么php就不会打扰它了。

修改

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

答案 2 :(得分:1)

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

阅读构造函数(link

的文档

使用new关键字创建类的实例。在新调用期间发生的事情是,为新对象分配了自己所请求的类中定义的属性的副本,然后在定义一个对象的情况下调用该对象的构造函数。构造函数是一个名为__construct()的方法,在创建对象后由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();

提示:由于构造函数无法返回值,因此在构造函数中引发错误的最常见做法是抛出异常。

答案 3 :(得分:1)

根据documentation从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