第七节--类的静态成员


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 文件上传模型,支持多文件上传
Aug 13 PHP
PHP开发的一些注意点总结
Oct 12 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 PHP
Ajax+PHP快速上手及简单应用说明
Jul 24 PHP
cakephp打印sql语句的方法
Feb 13 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
PHP实现的曲线统计图表示例
Nov 10 PHP
php指定长度分割字符串str_split函数用法示例
Jan 30 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
May 06 PHP
imagettftext() 失效,不起作用
Mar 09 PHP
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
Mar 29 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
php ctype函数中文翻译和示例
2014/03/21 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
2015/09/05 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
vue项目开启Gzip压缩和性能优化操作
2020/10/26 Javascript
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
python制作填词游戏步骤详解
2019/05/05 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
python中while和for的区别总结
2019/06/28 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
python制作微博图片爬取工具
2021/01/16 Python
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
“学雷锋活动月”总结
2014/03/09 职场文书
经典英文广告词
2014/03/18 职场文书
目标管理责任书
2014/04/15 职场文书
自我推荐信范文
2014/05/09 职场文书
合作协议书范文
2014/08/20 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记