第七节--类的静态成员


Posted in PHP onNovember 16, 2006

/*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢 
| = 欢迎批评指正,希望和所有PHP爱好者共同进步! 
| = PHP5研究中心: http://blog.csdn.net/haohappy2004
+-------------------------------------------------------------------------------+
*/

第七节--类的静态成员

类的静态成员与一般的类成员不同: 静态成员与对象的实例无关,只与类本身有关. 他们用来实现类要封装的功能和数据,但不包括特定对象的功能和数据. 静态成员包括静态方法和静态属性.

静态属性包含在类中要封装的数据,可以由所有类的实例共享. 实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量

我们在下例中使用了一个静态属性Counter::$count. 它属于Counter类,而不属于任何Counter的实例.你不能用this来引用它,但可以用self或其它有效的命名表达. 在例子中,getCount方法返回self::$count,而不是Counter::$count.

静态方法则实现类需要封装的功能,与特定的对象无关. 静态方法非常类似于全局函数. 静态方法可以完全访问类的属性,也可以由对象的实例来访问,不论访问的限定语是否是什么.

在6.3例中,getCount是一个普通的方法,用->来调用. PHP建立一个this变量,尽管方法没有使用到.但是,getCount不属于任何对象.在有些情况下,我们甚至希望在不存在有效的对象时调用它,那么就应该使用静态方法. PHP将不在静态方法内部建立this变量,即使你从一个对象中调用它们.

例子6.7由6.3改变getCount为静态方法而来. Static关键字不能阻止一个实例用->运算符来调用getCount,但PHP将不在方法内部建立this变量.如果你使用this->来调用,将会出错.

//6.3例指第四节--构造函数和析构函数中的例子(参看前文),通过两个例子的比较,你可以很好掌握
//static方法与普通方法之间的区别.

你可以写一个方法通过判断this是否建立来显示是否它被静态地或者非静态地调用. 当然,如果你用了static 关键字,不管它怎样被调用,这个方法总是静态的.

你的类也可以定义常量属性,不需要使用public static,只需要用const关键字即可. 常量属性总是静态的.它们是类的属性,而不是实例化该类的对象的属性.

Listing 6.7 Static members

<?php   
   class Counter   
   {   
       private static $count = 0;   
       const VERSION = 2.0;          function __construct()   
       {   
           self::$count++;   
       }   
       function __destruct()   
       {   
           self::$count--;   
       }   
       static function getCount()   
       {   
           return self::$count;   
       }   
   };   
   //创建一个实例,则__construct()将执行   
   $c = new Counter();   
   //输出 1   
   print(Counter::getCount() . "<br>\n");   
   //输出类的版本属性   
   print("Version used: " . Counter::VERSION . "<br>\n");   
?>  
PHP 相关文章推荐
GBK的页面输出JSON格式的php函数
Feb 16 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
PHP修改session_id示例代码
Jan 08 PHP
PHP中的Streams详细介绍
Nov 12 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
php json相关函数用法示例
Mar 28 PHP
PHP迭代器接口Iterator用法分析
Dec 28 PHP
thinkphp5实现无限级分类
Feb 18 PHP
PHP底层运行机制与工作原理详解
Jul 31 PHP
详解PHP设计模式之依赖注入模式
May 25 PHP
第六节--访问属性和方法
Nov 16 #PHP
第五节--克隆
Nov 16 #PHP
第四节--构造函数和析构函数
Nov 16 #PHP
第三节--定义一个类
Nov 16 #PHP
第二节--PHP5 的对象模型
Nov 16 #PHP
第一节--面向对象编程
Nov 16 #PHP
MYSQL数据库初学者使用指南
Nov 16 #PHP
You might like
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
yii添删改查实例
2015/11/16 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
对Python中内置异常层次结构详解
2018/10/18 Python
python实现归并排序算法
2018/11/22 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
财务会计人员求职的自我评价
2014/01/13 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
党员四风问题对照检查材料
2014/09/27 职场文书
实习班主任自我评价
2015/03/11 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
MySQL Shell的介绍以及安装
2021/04/24 MySQL
Python Parser的用法
2021/05/12 Python
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL