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数据库连接
Oct 09 PHP
有关php运算符的知识大全
Nov 03 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
领悟php接口中interface存在的意义
Jun 27 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
Apr 24 PHP
linux下实现定时执行php脚本
Feb 13 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
May 06 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 PHP
PHP常用日期加减计算方法实例小结
Jul 31 PHP
laravel实现按月或天或小时统计mysql数据的方法
Oct 09 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 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用数组返回无限分类的列表数据的代码
2010/08/08 PHP
域名和cookie问题(域名后缀)
2012/10/10 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
php简单压缩css样式示例
2016/09/22 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
javascript new一个对象的实质
2010/01/07 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
2019/04/11 Javascript
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
C# .NET面试题
2015/11/28 面试题
电厂职工自我鉴定
2014/02/20 职场文书
元旦活动感言
2014/03/08 职场文书
我的老师教学反思
2014/05/01 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
小学生表扬稿范文
2015/05/05 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
数学备课组工作总结
2015/08/12 职场文书