第七节--类的静态成员


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 相关文章推荐
动易数据转成dedecms的php程序
Apr 07 PHP
php 更新数据库中断的解决方法
Jun 05 PHP
PHP url 加密解密函数代码
Aug 26 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
在Windows XP下安装Apache+MySQL+PHP环境
Feb 22 PHP
两种php实现图片上传的方法
Jan 22 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
php获取今日开始时间和结束时间的方法
Feb 27 PHP
php生成网页桌面快捷方式
May 05 PHP
php多文件打包下载的实例代码
Jul 12 PHP
php表单习惯用的正则表达式
Oct 11 PHP
Thinkphp 框架扩展之驱动扩展实例分析
Apr 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格式化电话号码的方法
2015/04/24 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
用Juery网页选项卡实现代码
2011/06/13 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
Python之os操作方法(详解)
2017/06/15 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
电子技术专业中专生的自我评价
2013/12/17 职场文书
医院实习接收函
2014/01/12 职场文书
升国旗仪式主持词
2014/03/19 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
《社戏》教学反思
2014/04/15 职场文书
民族学专业求职信
2014/07/28 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python