PHP 5.0对象模型深度探索之类的静态成员


Posted in PHP onMarch 27, 2008

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

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

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

在前文的例子中,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

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() . "n");  
//输出类的版本属性  
print("Version used: " . Counter::VERSION . "n");  
?>
PHP 相关文章推荐
发一个php简单的伪原创程序,配合商城采集用的
Oct 12 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
Linux编译升级php的详细方法
Nov 04 PHP
php使用curl检测网页是否被百度收录的示例分享
Jan 31 PHP
PHP文件读写操作相关函数总结
Nov 18 PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 PHP
php删除数组中重复元素的方法
Dec 22 PHP
php简单统计中文个数的方法
Sep 30 PHP
Yii CFileCache 获取不到值的原因分析
Feb 08 PHP
thinkPHP事务操作简单案例分析
Oct 17 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
May 27 PHP
PHP isset()及empty()用法区别详解
Aug 29 PHP
PHP 5.0对象模型深度探索之对象复制
Mar 27 #PHP
PHP 5.0对象模型深度探索之属性和方法
Mar 27 #PHP
php简单静态页生成过程
Mar 27 #PHP
优化PHP代码的53条建议
Mar 27 #PHP
PHP连接access数据库
Mar 27 #PHP
某大型网络公司应聘时的笔试题目附答案
Mar 27 #PHP
php 无限极分类
Mar 27 #PHP
You might like
快速配置PHPMyAdmin方法
2008/06/05 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
php 计划任务 检测用户连接状态
2012/03/29 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
浅析vue-router原理
2018/10/19 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
Python测试人员需要掌握的知识
2018/02/08 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
python针对excel的操作技巧
2018/03/13 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
学校运动会开幕演讲稿
2014/01/04 职场文书
学雷锋倡议书
2015/01/19 职场文书
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL