构造方法 与析构方法
构造函数的声明与其它操作的声明一样,只是其名称必须是
__construct ( )
。这是
PHP5
中的变化,以前的版本中,构造函数的名称必须与类名相同,这种在
PHP5
中仍然可以用,但现在以经很少有人用了,这样做的好处是可以使构造函数独立于类名,当类名发生改变时不需要改相应的构造函数名称了。为了向下兼容,如果一个类中没有名为
__construct( )
的方法,
PHP
将搜索一个
php4
中的写
法
,
与类名相同名的构造方法。
格式:
function __construct ( [
参数
] ) { ... ... }
在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,所以通常用它执行一些有用的初始化任务。比如对成属性在创建对象的时候赋初值。
<?
//
创建一个人类
class
Person
{
//
下面是人的成员属性
var $
name
;
//
人的名子
var $
sex
;
//
人的性别
var $
age
;
//
人的年龄
//
定义一个构造方法参数为姓名
$name
、性别
$sex
和年龄
$age
function
__construct(
$
name
,
$
sex
,
$
age
)
{
//
通过构造方法传进来的
$name
给成员属性
$this->name
赋初使值
$
this
->name=
$
name
;
//
通过构造方法传进来的
$sex
给成员属性
$this->sex
赋初使值
$
this
->sex=
$
sex
;
//
通过构造方法传进来的
$age
给成员属性
$this->age
赋初使值
$
this
->age=
$
age
;
}
//
这个人的说话方法
function
say()
{
echo
"
我的名子叫:
"
.
$
this
->name.
"
性别:
"
.
$
this
->sex.
"
我的年龄是:
"
.
$
this
->age.
"<br>"
;
}
}
//
通过构造方法创建
3
个对象
$p1
、
p2
、
$p3,
分别传入三个不同的实参为姓名、性别和年龄
$
p1
=
new
Person(
“
张三
”
,
”
男
”
,
20
);
$
p2
=
new
Person(
“
李四
”
,
”
女
”
,
30
);
$
p3
=
new
Person(
“
王五
”
,
”
男
”
,
40
);
//
下面访问
$p1
对象中的说话方法
$
p1
->say();
//
下面访问
$p2
对象中的说话方法
$
p2
->say();
//
下面访问
$p3
对象中的说话方法
$
p3
->say();
?>
输出结果为:
我的名子叫:张三
性别:男
我的年龄是:
20
我的名子叫:李四 性别:女 我的年龄是: 30
我的名子叫:王五 性别:男 我的年龄是: 40
我的名子叫:李四 性别:女 我的年龄是: 30
我的名子叫:王五 性别:男 我的年龄是: 40
析构函数:
与构造函数相对的就是析构函数。析构函数是
PHP5
新添加的内容,在
PHP4
中没有析构函数。析构函数允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件,释放结果集等,
析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行,也就是对象在内存中被销毁前调用析构函数。
与构造函数的名称类似,一个类的析构函数名称必须是
__destruct ( )
。析构函数不能带有任何参数。
格式:
function __destruct ( ) { ... ... }
<?
//
创建一个人类
class
Person
{
//
下面是人的成员属性
var $
name
;
//
人的名子
var $
sex
;
//
人的性别
var $
age
;
//
人的年龄
//
定义一个构造方法参数为姓名
$name
、性别
$sex
和年龄
$age
function
__construct(
$
name
,
$
sex
,
$
age
)
{
//
通过构造方法传进来的
$name
给成员属性
$this->name
赋初使值
$
this
->name=
$
name
;
//
通过构造方法传进来的
$sex
给成员属性
$this->sex
赋初使值
$
this
->sex=
$
sex
;
//
通过构造方法传进来的
$age
给成员属性
$this->age
赋初使值
$
this
->age=
$
age
;
}
//
这个人的说话方法
function
say()
{
echo
"
我的名子叫:
"
.
$
this
->name.
"
性别:
"
.
$
this
->sex.
"
我的年龄是:
"
.
$
this
->age.
"<br>"
;
}
//
这是一个析构函数,在对象销毁前调用
function
__destruct()
{
echo
$this->name.“年龄
”
.
$
this
->age.
”
<br>
”
;
}
//
通过构造方法创建
3
个对象
$p1
、
p2
、
$p3,
分别传入三个不同的实参为姓名、性别和年龄
$
p1
=
new
Person(
“
张三
”
,
”
男
”
,
20
);
$
p2
=
new
Person(
“
李四
”
,
”
女
”
,
30
);
$
p3
=
new
Person(
“
王五
”
,
”
男
”
,
40
);
//
下面访问
$p1
对象中的说话方法
$
p1
->say();
//
下面访问
$p2
对象中的说话方法
$
p2
->say();
//
下面访问
$p3
对象中的说话方法
$
p3
->say();
?>
输出结果为:
我的名子叫:张三
性别:男
我的年龄是:
20
我的名子叫:李四 性别:女 我的年龄是: 30
我的名子叫:王五 性别:男 我的年龄是: 40
我的名子叫:李四 性别:女 我的年龄是: 30
我的名子叫:王五 性别:男 我的年龄是: 40
王五年龄40
李四年龄30
张三年龄20