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怎样调用MSSQL的存储过程
Oct 09 PHP
phpmyadmin的#1251问题
Nov 25 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
Mar 23 PHP
解析php 版获取重定向后的地址(代码)
Jun 26 PHP
PHP循环函数使用介绍之PHP基础入门教程
Sep 21 PHP
php查询whois信息的方法
Jun 08 PHP
在Linux系统下一键重新安装WordPress的脚本示例
Jun 30 PHP
php微信开发之百度天气预报
Nov 18 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
PHP实现简易图形计算器
Aug 28 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 fopen函数用法实例讲解
2019/02/15 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
Node.js的特点详解
2017/02/03 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
webpack打包node.js后端项目的方法
2018/03/10 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
Python列表生成器的循环技巧分享
2015/03/06 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
深入理解Python装饰器
2016/07/27 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
浅谈django的render函数的参数问题
2018/10/16 Python
python画双y轴图像的示例代码
2019/07/07 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python+django+rest框架配置创建方法
2019/08/31 Python
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
介绍一下gcc特性
2015/10/31 面试题
小组口号大全
2014/06/09 职场文书
毕业生见习报告总结
2014/11/08 职场文书
导游词之井冈山
2019/11/20 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python