|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的缩写,这种将名称放到定义中的写法被称作递归缩写。object|php5|函数 /*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>>
| = 中Classes and Objects一章的笔记
| = 翻译为主+团体心得
| = 为防止能够产生的不用要的费事请勿转载,感谢
| = 接待品评斧正,但愿和一切PHP喜好者配合前进!
+-------------------------------------------------------------------------------+
*/
第四节--机关函数和析构函数
假如你在一个类中声明一个函数,定名为__construct,这个函数将被当做是一个机关函数并在创立一个对象实例时被履行. 清晰地说,__是两个下划线. 就像其它任何函数一样,机关函数能够有参数或默许值. 你可以界说一个类来创立一个对象并将其属性全放在一个语句(statement)中.
你也能够界说一个名为__destruct的函数,PHP将在对象被烧毁前挪用这个函数. 它称为析构函数.
承继是类的一个壮大功效. 一个类(子类/派生类)可以承继另外一类(父类/基类)的功效. 派生类将包括有基类的一切属性和办法,并可以在派生类中加上其他属性和办法. 你也能够覆写基类的办法和属性. 就像3.1.2中显示的,你可以用extends关头字来承继一个类.
你能够想晓得机关函数是若何被承继的. 当它们和其它办法一同被承继时,他们不会在创立对象时被履行.
假如你需求这个功效,你需求用第二章提到的::运算符. 它答应你指向一块定名空间. parent指向父类定名空间,你可以用parent::__construct来挪用父类的机关函数.
一些面向对象言语在类以后定名机关函数. PHP的前几个版本也是如斯,到如今这类办法依然无效.也就是:假如你把一个类定名为Animal而且在个中创立一个定名也是Animal的办法,则这个办法就是机关函数.假如一个类的同时具有__construt机关函数和与类名不异的函数,PHP将把__construct看做机关函数.这使得用之前的PHP版本所写的类依然可使用. 但新的剧本(PHP5)应该利用__construct.
PHP的这类新的声明机关函数的办法可使机关函数有一个举世无双的称号,不管它地点的类的称号是甚么. 如许你在改动类的称号时,就不需求改动机关函数的称号.
你能够在PHP中给机关函数一个像其它类办法一样的会见体例. 会见体例将会影响从必定局限内实例化对象的才能. 这答应完成一些固定的设计形式,如Singleton形式.
析构函数,相反于机关函数. PHP挪用它们来将一个对象从内存中烧毁. 默许地,PHP仅仅释放对象属性所占用的内存并烧毁对象相干的资本. 析构函数答应你在利用一个对象以后履行恣意代码来排除内存.
当PHP决意你的剧本不再与对象相干时,析构函数将被挪用. 在一个函数的定名空间内,这会产生在函数return的时分. 关于全局变量,这产生于剧本停止的时分. 假如你想明白地烧毁一个对象,你可以给指向该对象的变量分派任何其它值. 凡是将变量赋值勤为NULL或挪用unset .
上面的例子中,盘算从类中实例化的对象的个数. Counter类从机关函数入手下手增值,在析构函数减值.
一旦你界说了一个类,你可以用new来创立一个这个类的实例. 类的界说是设计图,实例则是放在拆卸线上的元件. New需求类的称号,并前往该类的一个实例. 假如机关函数需求参数,你应该在new后输出参数.
<?php
class Counter
{
private static $count = 0;
function __construct()
{
self::$count++;
}
function __destruct()
{
self::$count--;
}
function getCount()
{
return self::$count;
}
}
//创立第一个实例
$c = new Counter();
//输入1
print($c->getCount() . "<br>n");
//创立第二个实例
$c2 = new Counter();
//输入2
print($c->getCount() . "<br>n");
//烧毁实例
$c2 = NULL;
//输入1
print($c->getCount() . "<br>n");
?>
当你新建了一个实例,内存会被筹办来存储一切属性. 每一个实例有本人独有的一组属性. 但办法是由该类的一切实例同享的. 当然你可以把你最基本的功能放出来的时候就放出来,比如放到论坛上,让大家都参与, |
|