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 全局变量范围分析
Aug 07 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
国产PHP开发框架myqee新手快速入门教程
Jul 14 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
PHP程序员的技术成长规划
Mar 25 PHP
Yii多表联合查询操作详解
Jun 02 PHP
PHP实现支付宝即时到账功能
Dec 21 PHP
PHP 文件上传后端处理实用技巧方法
Jan 06 PHP
php之可变函数的实例详解
Sep 13 PHP
php 数据结构之链表队列
Oct 17 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 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 iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
用pickle存储Python的原生对象方法
2017/04/28 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
在Python中使用Neo4j的方法
2019/03/14 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
商场中秋节活动方案
2014/02/07 职场文书
体育运动口号
2014/06/09 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
民事调解协议书
2016/03/21 职场文书