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 相关文章推荐
浅谈Windows下 PHP4.0与oracle 8的连接设置
Oct 09 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
PHP模块 Memcached功能多于Memcache
Jun 14 PHP
PHP中获取变量的变量名的一段代码的bug分析
Jul 07 PHP
PHP容易忘记的知识点分享
Apr 30 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
使用array_map简单搞定PHP删除文件、删除目录
Oct 29 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
php判断邮箱地址是否存在的方法
Feb 13 PHP
浅析PHP7的多进程及实例源码
Apr 14 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实现的在线人员函数库
2008/04/09 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
JS中实现函数return多个返回值的实例
2017/02/21 Javascript
解析jquery easyui tree异步加载子节点问题
2017/03/08 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
会计专业毕业生求职信分享
2014/01/03 职场文书
单位提档介绍信
2014/01/17 职场文书
家长对孩子的感言
2014/03/10 职场文书
新学期决心书
2014/03/11 职场文书
完整版商业计划书
2014/09/15 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
文员岗位职责范本
2015/04/16 职场文书