构造函数是PHP中总要的基本语法,什么是构造函数呢?我们这里就一起来看看PHP构造函数。如果你在一个类中声明一个函数,命名为__construct,这个函数将被当成是一个构造函数并在建立一个对象实例时被执行.清楚地说,__是两个下划线.就像其它任何函数一样,构造函数可能有参数或者默认值.你可以定义一个类来建立一个对象并将其属性全放在一个语句(statement)中.
你也可以定义一个名为__destruct的函数,PHP将在对象被销毁前调用这个函数.它称为析构函数.继承是类的一个强大功能.一个类(子类/派生类)可以继承另一类(父类/基类)的功能.派生类将包含有基类的所有属性和方法,并可以在派生类中加上其他属性和方法.你也可以覆写基类的方法和属性.你可能想知道构造函数是如何被继承的.当它们和其它方法一起被继承时,他们不会在创建对象时被执行.
PHP构造函数其它类方法一样的访问方式.访问方式将会影响从一定范围内实例化对象的能力.这允许实现一些固定的设计模式,如Singleton模式.析构函数,相反于构造函数.PHP调用它们来将一个对象从内存中销毁.默认地,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源.析构函数允许你在使用一个对象之后执行任意代码来清除内存.当PHP决定你的脚本不再与对象相关时,析构函数将被调用.在一个函数的命名空间内,这会发生在函数return的时候.对于全局变量,这发生于脚本结束的时候.如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋值勤为NULL或者调用unset.
下面的例子中,计算从类中实例化的对象的个数.Counter类从构造函数开始增值,在析构函数减值.一旦你定义了一个类,你可以用new来建立一个这个类的实例.类的定义是设计图,实例则是放在装配线上的元件.New需要类的名称,并返回该类的一个实例.如果构造函数需要参数,你应当在new后输入参数.
<ol class="dp-xml"> <li class="alt"><span><strong><font color="#006699"><span class="tag"></span><span class="tag-name">php</span></font></strong><span> </span></span></li> <li class=""><span>classCounter </span></li> <li class="alt"><span>{ </span></li> <li class=""> <span>privatestatic$</span><span class="attribute"><font color="#ff0000">count</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">0</font></span><span>; </span> </li> <li class="alt"><span>function__construct() </span></li> <li class=""><span>{ </span></li> <li class="alt"><span>self::$count++; </span></li> <li class=""><span>} </span></li> <li class="alt"><span>function__destruct() </span></li> <li class=""><span>{ </span></li> <li class="alt"><span>self::$count--; </span></li> <li class=""><span>} </span></li> <li class="alt"><span>functiongetCount() </span></li> <li class=""><span>{ </span></li> <li class="alt"><span>returnself::$count; </span></li> <li class=""><span>} </span></li> <li class="alt"><span>} </span></li> <li class=""><span>//建立第一个实例 </span></li> <li class="alt"> <span>$</span><span class="attribute"><font color="#ff0000">c</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">newCounter</font></span><span>(); </span> </li> <li class=""><span>//输出1 </span></li> <li class="alt"> <span>print($c-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>getCount()."</span><strong><font color="#006699"><span class="tag"><span class="tag-name">br</span><span class="tag">></span></span></font></strong><span>n"); </span> </li> <li class=""><span>//建立第二个实例 </span></li> <li class="alt"> <span>$</span><span class="attribute"><font color="#ff0000">c2</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">newCounter</font></span><span>(); </span> </li> <li class=""><span>//输出2 </span></li> <li class="alt"> <span>print($c-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>getCount()."</span><strong><font color="#006699"><span class="tag"><span class="tag-name">br</span><span class="tag">></span></span></font></strong><span>n"); </span> </li> <li class=""><span>//销毁实例 </span></li> <li class="alt"> <span>$</span><span class="attribute"><font color="#ff0000">c2</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">NULL</font></span><span>; </span> </li> <li class=""><span>//输出1 </span></li> <li class="alt"> <span>print($c-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>getCount()."</span><strong><font color="#006699"><span class="tag"><span class="tag-name">br</span><span class="tag">></span></span></font></strong><span>n"); </span> </li> <li class=""> <span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span> </li> </ol>
当你新建了一个实例,内存会被准备来存储所有属性.每个实例有自己独有的一组属性.但方法是由该类的所有实例共享的.