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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
不错的PHP学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
php相当简单的分页类
Oct 02 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
Aug 03 PHP
浅析PHP Socket技术
Aug 02 PHP
php cli换行示例
Apr 22 PHP
通过php修改xml文档内容的方法
Jan 23 PHP
PHP开发中AJAX技术的简单应用
Dec 11 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 PHP
php实现对文件压缩简单的方法
Sep 29 PHP
PHP高并发和大流量解决方案整理
Dec 24 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实现将GB编码转换为UTF8
2006/11/25 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
电气专业推荐信范文
2013/11/18 职场文书
党支部三会一课计划
2014/09/24 职场文书
党员剖析材料范文
2014/12/18 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
Python socket如何解析HTTP请求内容
2022/02/12 Python
MySQL创建表操作命令分享
2022/03/25 MySQL
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript