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 08 PHP
php skymvc 一款轻量、简单的php
Jun 28 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
Aug 07 PHP
ThinkPHP使用心得分享-分页类Page的用法
May 15 PHP
php遍历类中包含的所有元素的方法
May 12 PHP
PHP获得数组交集与差集的方法
Jun 10 PHP
php封装的page分页类完整实例
Oct 18 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
Sep 05 PHP
Laravel5.1 框架控制器基础用法实例分析
Jan 04 PHP
PHP基于ip2long实现IP转换整形
Dec 11 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
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
PHP安全上传图片的方法
2015/03/21 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
Python中字符串的修改及传参详解
2016/11/30 Python
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
python中栈的原理及实现方法示例
2019/11/27 Python
python实现查找所有程序的安装信息
2020/02/18 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
大学生求职自我评价
2014/01/16 职场文书
学习三严三实心得体会
2014/10/13 职场文书
公司庆典欢迎词
2015/01/26 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
python小程序之飘落的银杏
2021/04/17 Python
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL