第七节--类的静态成员


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 相关文章推荐
JS实现php的伪分页
May 25 PHP
PHP 加密解密内部算法
Apr 22 PHP
利用PHP生成静态HTML文档的原理
Oct 29 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
php 下载保存文件保存到本地的两种实现方法
Aug 12 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
PHP实现微信退款的方法示例
Mar 26 PHP
laravel 解决强制跳转 https的问题
Oct 22 PHP
PHP中类与对象功能、用法实例解读
Mar 27 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利用单例模式实现日志处理类库
2014/02/10 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
纯Javascript实现ping功能的方法
2015/03/20 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
python获取元素在数组中索引号的方法
2015/07/15 Python
python爬虫实例详解
2018/06/19 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
Python字典对象实现原理详解
2019/07/01 Python
Python for循环与getitem的关系详解
2020/01/02 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
百思买美国官网:Best Buy
2016/07/28 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
公司领导推荐信
2013/11/12 职场文书
传媒专业推荐信范文
2013/11/23 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
读群众路线心得体会
2014/03/07 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
高一英语教学反思
2016/03/03 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
React实现动效弹窗组件
2021/06/21 Javascript
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL