第四节--构造函数和析构函数 -- Classes and Objects in PHP5 [4]
发布日期:2021-10-21 03:37:56
浏览次数:18
分类:技术文章
本文共 2073 字,大约阅读时间需要 6 分钟。
第四节--构造函数和析构函数 -- Classes and Objects in PHP5 [4] |
作者:Leon Atkinson 翻译:Haohappy 来源:超越PHP |
/*+-------------------------------------------------------------------------------+| = 本文为Haohappy读<<Core PHP Programming>> | = 中Classes and Objects一章的笔记 | = 翻译为主+个人心得 | = 为避免可能发生的不必要的麻烦请勿转载,谢谢 | = 欢迎批评指正,希望和所有PHP爱好者共同进步! +-------------------------------------------------------------------------------+*/第四节--构造函数和析构函数如果你在一个类中声明一个函数,命名为__construct,这个函数将被当成是一个构造函数并在建立一个对象实例时被执行. 清楚地说,__是两个下划线. 就像其它任何函数一样,构造函数可能有参数或者默认值. 你可以定义一个类来建立一个对象并将其属性全放在一个语句(statement)中. 你也可以定义一个名为__destruct的函数,PHP将在对象被销毁前调用这个函数. 它称为析构函数.继承是类的一个强大功能. 一个类(子类/派生类)可以继承另一类(父类/基类)的功能. 派生类将包含有基类的所有属性和方法,并可以在派生类中加上其他属性和方法. 你也可以覆写基类的方法和属性. 就像3.1.2中显示的,你可以用extends关键字来继承一个类.你可能想知道构造函数是如何被继承的. 当它们和其它方法一起被继承时,他们不会在创建对象时被执行.如果你需要这个功能,你需要用第二章提到的::运算符. 它允许你指向一块命名空间. parent指向父类命名空间,你可以用parent::__construct来调用父类的构造函数.一些面向对象语言在类之后命名构造函数. PHP的前几个版本也是如此,到现在这种方法仍然有效.也就是:如果你把一个类命名为Animal并且在其中建立一个命名也是Animal的方法,则这个方法就是构造函数.如果一个类的同时拥有__construt构造函数和与类名相同的函数,PHP将把__construct看作构造函数.这使得用以前的PHP版本所写的类仍然可以使用. 但新的脚本(PHP5)应当使用__construct. PHP的这种新的声明构造函数的方法可以使构造函数有一个独一无二的名称,无论它所在的类的名称是什么. 这样你在改变类的名称时,就不需要改变构造函数的名称.你可能在PHP中给构造函数一个像其它类方法一样的访问方式. 访问方式将会影响从一定范围内实例化对象的能力. 这允许实现一些固定的设计模式,如Singleton模式.析构函数,相反于构造函数. PHP调用它们来将一个对象从内存中销毁. 默认地,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源. 析构函数允许你在使用一个对象之后执行任意代码来清除内存.当PHP决定你的脚本不再与对象相关时,析构函数将被调用. 在一个函数的命名空间内,这会发生在函数return的时候. 对于全局变量,这发生于脚本结束的时候. 如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值. 通常将变量赋值勤为NULL或者调用unset .下面的例子中,计算从类中实例化的对象的个数. Counter类从构造函数开始增值,在析构函数减值.一旦你定义了一个类,你可以用new来建立一个这个类的实例. 类的定义是设计图,实例则是放在装配线上的元件. New需要类的名称,并返回该类的一个实例. 如果构造函数需要参数,你应当在new后输入参数. <?php class Counter { private static $count = 0; function __construct() { self::$count++; } function __destruct() { self::$count--; } function getCount() { return self::$count; } } //建立第一个实例 $c = new Counter(); //输出1 print($c->getCount() . "<br>n"); //建立第二个实例 $c2 = new Counter(); //输出2 print($c->getCount() . "<br>n"); //销毁实例 $c2 = NULL; //输出1 print($c->getCount() . "<br>n"); ?> 当你新建了一个实例,内存会被准备来存储所有属性. 每个实例有自己独有的一组属性. 但方法是由该类的所有实例共享的. |
转载地址:https://blog.csdn.net/WapWeb/article/details/23015 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月11日 02时20分32秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
英语小短文翻译1——The Significance of Books
2019-04-26
杂乱的Java笔记(未完)
2019-04-26
Java的类与类之间的USES-A和HAS-A及区分
2019-04-26
Java中类的构造方法
2019-04-26
java成员变量的使用
2019-04-26
java方法的重载
2019-04-26
在Windows命令行运行java程序
2019-04-26
java的可扩展性
2019-04-26
java中JDK的安装
2019-04-26
Java之数组小知识(加内存图)
2019-04-26
关于Java的一些图形awt介绍
2019-04-26
java之StringBuilder和关于数组怎么扩容
2019-04-26
java中的形参为引用类型的问题
2019-04-26
模拟太阳系项目
2019-04-26
c语言基础语法六——结构体(完结)
2019-04-26
我的大二上学期
2019-04-26
安卓——eclipse真机连接问题解决1
2019-04-26
安卓——按钮的四种点击事件
2019-04-26
c语言基础语法三——数组
2019-04-26
链表操作——多项式加减乘
2019-04-26