类构造函数有什么作用?

时间:2011-02-22 06:54:23

标签: php constructor

我傻眼了。我一直在寻找关于类构造函数(特别是在PHP中)的确切定义。

据我了解,这是该类在调用时执行的初始函数,是否正确?

是否我们专门调用函数本身?

有人能在这里说清楚吗?或者至少指出我正确的方向。

8 个答案:

答案 0 :(得分:4)

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

构造函数通过初始化所有实例变量并在内存中创建一个位置来保存Object来创建它所在类的Object。

  

例如,您可能想要初始化   基于10或20的整数变量   在某种情况下,当你的   类已创建。在这种情况下你   不能硬编码值   变量声明。这样的   代码可以放在里面   构造函数使初始化   会在课堂上发生   实例化。


首次调用PHP类时,该类将自动运行类构造函数,这可以帮助自动配置类。如果您需要在使用类方法之前预设一些实例变量,会话或cookie,这将非常有用。

Constructors in PHP

的好读

答案 1 :(得分:2)

你或多或少是正确的 - 它是一个在实例化类时调用的函数(使用new关键字创建)。

除非扩展类并覆盖构造函数,否则不必专门调用它,因为除非使用__construct()明确定义,否则子类parent::__construct()不会调用它的父构造函数。

E.g。

class A {

    public $value;

    function __construct() {
        $this->value = "A";
    }

}

$a = new A();
echo $a->value; // "A";

class B extends A {
}

$b = new B();
echo $b->value; // "A";

class C extends A {

    function __construct() {
        $this->value = "C";
    }

}

$c = new C();
echo $c->value; // "C";

class D extends A {

    function __construct() {
        $this->value = "D";
        parent::__construct();
    }

}

$d = new D();
echo $d->value; // "D";

答案 2 :(得分:0)

当您创建类的新实例时会调用它,该实例会自动调用,您可以在那里启动任何局部变量。要在释放/销毁对象之前完成必须完成的工作,可以使用析构函数。构造函数和析构函数不是PHP特定的,但对于OO编程语言是通用的。 见this

答案 3 :(得分:0)

只要创建了类的新实例(即对象),就会调用构造函数。这允许您设置对象的状态,以及传入对象可能需要正常工作的任何依赖项,例如CacheManager或数据库连接,或者......

如果你有一个继承链,即C类扩展了扩展了A类的B类,那么请记住如果你在链的下方某处覆盖构造函数,则显式调用父构造函数:

<?php

class C extends B
{
  public function __construct ($constructorParams)
  {
     parent::__construct($constructorParams);
  }
}

构造函数不应返回值。

答案 4 :(得分:0)

  

据我了解,这是类在调用时执行的初始函数,是正确的吗?

这是首次创建的新实例时调用的方法。它是一个实例方法,因为它只适用于实例。 (一个对象是一个实例;一个类是 对象所属的东西。方法可以属于类,而不是实例。 PHP调用这些静态方法,但这并不总是其他语言使用的术语。)

在某些语言中,构造函数实际返回新对象。在PHP中不是这种情况,其中构造函数用于初始化目的。

  

是否我们专门调用函数本身会被调用?

正确。当您使用new运算符时调用它。

class Foo {
    public function __construct() { echo "I foo'd.\n" ;}
}
$f = new Foo(); // Echos "I foo'd.\n"

你可能想要read over the PHP manual sections about classes and objects

答案 5 :(得分:0)

没有。 没有。 是。

只有在创建对象时才会调用构造函数。当你以后只在某处使用你的对象时,它不会被调用。

创建新对象时,构造函数是一个被调用的方法,它初始化对象的变量/字段。

构造函数必须与其所在的类具有相同的名称。

答案 6 :(得分:0)

是。来自维基百科 -

在PHP(版本5及更高版本)中,构造函数是一个名为__construct()的方法,关键字new在创建对象后自动调用。它通常用于自动执行各种初始化,例如属性初始化。构造函数也可以接受参数,在这种情况下,在编写新语句时,还需要在括号之间向构造函数发送函数参数。

答案 7 :(得分:-1)

#include<iostream>
using namespace std;

class shape{

 protected:

 int w, h, a;

 public:

 shape(int, int);

};

shape :: shape(int x, int y){

 w = x;
 h = y; 

};

class triangle : public shape{

 public:

 void disp_area();

};

void triangle :: disp_area(){

 a = (w + h) * 1 / 2;   

 cout<<endl<<" Area Of Triangle : "<<a;

};

class rectangle : public shape{

 public:

 void disp_area();  

};

void rectangle :: disp_area(){

 a = w * h;

 cout<<endl<<" Area Of Rectangle : "<<a;    

};

int main(){

 triangle obj1;
 rectangle obj2;

 obj1.shape(2, 3);
 obj2.shape(4, 5);

 obj1.disp_area();
 obj2.disp_area();  

  return 0; 
};