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学习之 认清变量的作用范围
Jan 26 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
PHP中is_file不能替代file_exists的理由
Mar 04 PHP
PHP Session机制简介及用法
Aug 19 PHP
php通过session防url攻击方法
Dec 10 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
php强大的时间转换函数strtotime
Feb 18 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
php+ajax实现文件切割上传功能示例
Mar 03 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
PHP实现唤起微信支付功能
2019/02/18 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
Prototype Template对象 学习
2009/07/19 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
python 简单的多线程链接实现代码
2016/08/28 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
python实现简单俄罗斯方块
2020/03/13 Python
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
高三自我鉴定
2013/10/23 职场文书
药学职务聘任书
2014/03/29 职场文书
社会实践活动总结报告
2014/04/29 职场文书
关于教师节的广播稿
2014/09/10 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
党委工作总结2015
2015/04/27 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
mysql sql常用语句大全
2022/06/21 MySQL