第七节--类的静态成员


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 相关文章推荐
PHP.MVC的模板标签系统(五)
Sep 05 PHP
smarty静态实验表明,网络上是错的~呵呵
Nov 25 PHP
php采集时被封ip的解决方法
Aug 29 PHP
在MongoDB中模拟Auto Increment的php代码
Mar 06 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
WordPress中用于获取文章作者与分类信息的方法整理
Dec 17 PHP
在php中设置session用memcache来存储的方法总结
Jan 14 PHP
php通过执行CutyCapt命令实现网页截图的方法
Sep 30 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
Oct 21 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
Sep 17 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
php实现购物车功能(上)
2020/07/23 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
JS中Iframe之间传值的方法
2013/03/11 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
GWebs公司笔试题
2012/05/04 面试题
项目开发计划书
2014/01/09 职场文书
化学教育专业求职信
2014/07/08 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
致青春观后感
2015/06/09 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript