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 相关文章推荐
数据库相关问题
Oct 09 PHP
缓存技术详谈―php
Dec 14 PHP
php smarty的预保留变量总结
Dec 04 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
Mar 01 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
Dec 16 PHP
PHP框架Laravel的小技巧两则
Feb 10 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
php自定义时间转换函数示例
Dec 07 PHP
PHP中trait使用方法详细介绍
May 21 PHP
PHP数据库操作二:memcache用法分析
Aug 16 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
php2html php生成静态页函数
2008/12/08 PHP
一道关于php变量引用的面试题
2010/08/08 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
如何取得中文字符串中出现次数最多的子串
2013/08/08 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
php对数组排序代码分享
2014/02/24 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
Python上下文管理器全实例详解
2019/11/12 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
Python的信号库Blinker用法详解
2020/12/31 Python
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
意大利运动服减价商店:ScontoSport
2020/03/10 全球购物
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
演讲稿格式范文
2014/05/19 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
正确使用MySQL update语句
2021/05/26 MySQL
react 项目中引入图片的几种方式
2021/06/02 Javascript
一条慢SQL语句引发的改造之路
2022/03/16 MySQL