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_Flame(Version:Progress)的原代码
Oct 09 PHP
elgg 获取文件图标地址的方法
Mar 20 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
PHP中date与gmdate的区别及默认时区设置
May 12 PHP
php中filter_input函数用法分析
Nov 15 PHP
php单态设计模式(单例模式)实例
Nov 18 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
java模拟PHP的pack和unpack类
Apr 13 PHP
thinkPHP简单实现多个子查询语句的方法
Dec 05 PHP
浅谈php中curl、fsockopen的应用
Dec 10 PHP
php插入mysql数据返回id的方法
May 31 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实现复制移动文件的方法
2015/07/29 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
js控制input输入字符解析
2013/12/27 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
VueCli3构建TS项目的方法步骤
2018/11/07 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
详解Python的循环结构知识点
2019/05/20 Python
浅谈Python 递归算法指归
2019/08/22 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
浅析Python迭代器的高级用法
2020/07/16 Python
Python远程linux执行命令实现
2020/11/11 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
香港通票:Hong Kong Pass
2019/02/26 全球购物
《黄河颂》教学反思
2014/02/07 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
离职报告范文
2014/11/04 职场文书
西安兵马俑导游词
2015/02/02 职场文书
运动员代表致辞
2015/07/29 职场文书
六一儿童节园长致辞
2015/07/31 职场文书