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中支持多种编码的中文字符串截取函数!
Mar 20 PHP
php下检测字符串是否是utf8编码的代码
Jun 28 PHP
php使用Imagick生成图片的方法
Jul 31 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
浅谈PHP中的错误处理和异常处理
Feb 04 PHP
PHP实现查询手机归属地的方法详解
Apr 28 PHP
PHP简单留言本功能实现代码
Jun 09 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
PHP创建自己的Composer包方法
Apr 09 PHP
php提供实现反射的方法和实例代码
Sep 17 PHP
php7 新增功能实例总结
May 25 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
BBS(php &amp; mysql)完整版(二)
2006/10/09 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
PHP写日志的实现方法
2014/11/05 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
在Python中使用异步Socket编程性能测试
2014/06/25 Python
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
python之消除前缀重命名的方法
2018/10/21 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
django下创建多个app并设置urls方法
2020/08/02 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
Python类型转换的魔术方法详解
2020/12/23 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
早会主持词
2014/03/17 职场文书
出生证明公证书
2014/04/09 职场文书
社团活动总结范文
2014/04/26 职场文书
2014年老干部工作总结
2014/11/21 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技