PHP面向对象(OOP)编程完全教程:8.构造方法__construct()与析构方法__destruct()
来源:互联网 发布:淘宝卖家免费工具 编辑:程序博客网 时间:2024/04/30 08:02
大多数类都有一种称为构造函数的特殊方法。当创建一个对象时,它将自动调用构造函数,也就是使用new这个关键字来实例化对象的时候自动调用构造方法。构 造函数的声明与其它操作的声明一样,只是其名称必须是__construct( )。这是PHP5中的变化,以前的版本中,构造函数的名称必须与类名相同,这种在PHP5中仍然可以用,但现在以经很少有人用了,这样做的好处是可以使构 造函数独立于类名,当类名发生改变时不需要改相应的构造函数名称了。为了向下兼容,如果一个类中没有名为__construct( )的方法,PHP将搜索一个php4中的写法,与类名相同名的构造方法。
格式:function __construct ( [参数] ) { ... ... }
在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,所以通常用它执行一些有用的初始化任务。比如对成属性在创建对象的时候赋初值。
01
<?
02
//创建一个人类
03
class
Person
04
{
05
//下面是人的成员属性
06
var
$name
;
//人的名子
07
var
$sex
;
//人的性别
08
var
$age
;
//人的年龄
09
10
//定义一个构造方法参数为姓名$name、性别$sex和年龄$age
11
function
__construct(
$name
,
$sex
,
$age
) {
12
//通过构造方法传进来的$name给成员属性$this->name赋初使值
13
$this
->name =
$name
;
14
//通过构造方法传进来的$sex给成员属性$this->sex赋初使值
15
$this
->sex =
$sex
;
16
//通过构造方法传进来的$age给成员属性$this->age赋初使值
17
$this
->age =
$age
;
18
}
19
20
//这个人的说话方法
21
function
say() {
22
echo
"我的名子叫:"
.
$this
->name .
" 性别:"
.
$this
->sex .
" 我的年龄是:"
.
$this
->age;
23
}
24
}
25
26
//通过构造方法创建3个对象$p1、p2、$p3,分别传入三个不同的实参为姓名、性别和年龄
27
$p1
=
new
Person(
"张三"
,
"男"
, 20);
28
$p2
=
new
Person(
"李四"
,
"女"
, 30);
29
$p3
=
new
Person(
"王五"
,
"男"
, 40);
30
31
//下面访问$p1对象中的说话方法
32
$p1
->say();
33
//下面访问$p2对象中的说话方法
34
$p2
->say();
35
//下面访问$p3对象中的说话方法
36
$p3
->say();
37
?>
输出结果为:
我的名子叫:张三 性别:男 我的年龄是:20我的名子叫:李四 性别:女 我的年龄是:30我的名子叫:王五 性别:男 我的年龄是:40
如图:
析构函数:
与构造函数相对的就是析构函数。析构函数是PHP5新添加的内容,在PHP4中没有析构函数。 析构函数允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件, 释放结果集等,析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行,也就是对象在内存中被销毁前调用析构函数。与构造函数的名称类似, 一个类的析构函数名称必须是__destruct( )。析构函数不能带有任何参数。
格式:function __destruct ( ) { ... ... }
01
<?
02
//创建一个人类
03
class
Person
04
{
05
//下面是人的成员属性
06
var
$name
;
//人的名子
07
var
$sex
;
//人的性别
08
var
$age
;
//人的年龄
09
10
//定义一个构造方法参数为姓名$name、性别$sex和年龄$age
11
function
__construct(
$name
,
$sex
,
$age
) {
12
//通过构造方法传进来的$name给成员属性$this->name赋初使值
13
$this
->name =
$name
;
14
//通过构造方法传进来的$sex给成员属性$this->sex赋初使值
15
$this
->sex =
$sex
;
16
//通过构造方法传进来的$age给成员属性$this->age赋初使值
17
$this
->age =
$age
;
18
}
19
20
//这个人的说话方法
21
function
say() {
22
echo
"我的名子叫:"
.
$this
->name .
" 性别:"
.
$this
->sex .
" 我的年龄是:"
.
$this
->age;
23
}
24
25
//这是一个析构函数,在对象销毁前调用
26
function
__destruct() {
27
echo
"再见"
.
$this
->name;
28
}
29
}
30
31
//通过构造方法创建3个对象$p1、p2、$p3,分别传入三个不同的实参为姓名、性别和年龄
32
$p1
=
new
Person(
"张三"
,
"男"
, 20);
33
$p2
=
new
Person(
"李四"
,
"女"
, 30);
34
$p3
=
new
Person(
"王五"
,
"男"
, 40);
35
36
//下面访问$p1对象中的说话方法
37
$p1
->say();
38
//下面访问$p2对象中的说话方法
39
$p2
->say();
40
//下面访问$p3对象中的说话方法
41
$p3
->say();
42
?>
输出结果为:
我的名子叫:张三 性别:男 我的年龄是:20我的名子叫:李四 性别:女 我的年龄是:30我的名子叫:王五 性别:男 我的年龄是:40
再见王五
再见李四
再见张三
注意:
由于类实例是以堆栈的形式放在内存中,所以最后调用 析构函数 的时候,输出顺序是按 后进先出 的原则!
- PHP面向对象(OOP)编程完全教程:8.构造方法__construct()与析构方法__destruct()
- PHP面向对象(OOP)编程完全教程:8.构造方法__construct()与析构方法__destruct()
- -PHP面向对象(OOP)编程入门-8.构造方法__construct()与析构方法__destruct()
- PHP面向对象(OOP)构造方法__construct()与析构方法__destruct()
- 构造方法__construct()与析构方法__destruct()
- PHP魔术方法之构造方法__construct与析构方法__destruct
- php面向对象编程之构造方法 __construct()
- php面向对象之构造方法__construct()
- PHP面向对象(OOP)编程完全教程:22.把对象串行化serialize()方法
- php面向对象(OOP)编程完全教程
- php面向对象(OOP)编程完全教程
- php面向对象(OOP)编程完全教程
- php面向对象(OOP)—构造方法与析构方法
- PHP面向对象(OOP)编程完全教程:10.__set(),__get(),__isset(),__unset()四个方法的应用
- PHP构造函数__construct和析构函数__destruct
- php魔术方法汇总之__construct(),__destruct()
- 构造函数与析构函数[__construct __destruct()]
- PHP 构造方法 __construct()
- WINDOW PHONE sdK离线包下载
- Bayesian Face Revisited: A Joint Formulation 算法流程图
- glew在linux环境下的编译
- poj1502 MPI Maelstrom 最短路径,dijkstra
- .exe文件解压不出来/解压不出来.exe文件
- PHP面向对象(OOP)编程完全教程:8.构造方法__construct()与析构方法__destruct()
- ubuntu修改主机名后无法解析主机
- Choosing innodb_buffer_pool_size
- MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStart
- PHP DOM
- 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
- 基于需求的测试
- 转职的道路
- The InnoDB Buffer Pool