php面向对象全攻略 (四)构造方法与析构方法


Posted in PHP onSeptember 30, 2009

8.构造方法与析构方法
大多数类都有一种称为构造函数的特殊方法。当创建一个对象时,它将自动调用构造函
数,也就是使用new 这个关键字来实例化对象的时候自动调用构造方法。
构造函数的声明与其它操作的声明一样,只是其名称必须是__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
如图:
php面向对象全攻略 (四)构造方法与析构方法 
析构函数:
与构造函数相对的就是析构函数。析构函数是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.”<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
再见张三
再见李四
再见王五
PHP 相关文章推荐
无数据库的详细域名查询程序PHP版(3)
Oct 09 PHP
剖析 PHP 中的输出缓冲
Dec 21 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
PHP取整数函数常用的四种方法小结
Jul 05 PHP
关于尾递归的使用详解
May 02 PHP
深入php多态的实现详解
Jun 09 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
浅析php工厂模式
Nov 25 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
Feb 19 PHP
PHP开发APP端微信支付功能
Feb 17 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 #PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
Sep 30 #PHP
php面向对象全攻略 (一) 面向对象基础知识
Sep 30 #PHP
PHP5 操作MySQL数据库基础代码
Sep 29 #PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 #PHP
php 生成饼图 三维饼图
Sep 28 #PHP
php 不同编码下的字符串长度区分
Sep 26 #PHP
You might like
php的curl封装类用法实例
2014/11/07 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
用python写asp详细讲解
2013/12/16 Python
Python函数式编程
2017/07/20 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
python实现超市扫码仪计费
2018/05/30 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
《母鸡》教学反思
2014/02/25 职场文书
安全教育月活动总结
2014/05/05 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
详解Vue的sync修饰符
2021/05/15 Vue.js
golang语言指针操作
2022/04/14 Golang