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 相关文章推荐
ajax取消挂起请求的处理方法
Mar 18 PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
Jun 24 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
php中创建和调用webservice接口示例
Jul 25 PHP
浅析PHP文件下载原理
Dec 25 PHP
php实现从上传文件创建缩略图的方法
Apr 02 PHP
Laravel 5框架学习之Blade 简介
Apr 08 PHP
yii添删改查实例
Nov 16 PHP
Thinkphp单字母函数使用指南
May 08 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
PHP使用SOAP调用API操作示例
Dec 25 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
PHP生成Flash动画的实现代码
2010/03/12 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
使用python实现省市三级菜单效果
2016/01/20 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
用Python解决x的n次方问题
2019/02/08 Python
浅析PEP572: 海象运算符
2019/10/15 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
造型师求职自荐信
2013/09/27 职场文书
传播学专业毕业生自荐信
2013/11/04 职场文书
书香校园活动方案
2014/02/28 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
公司考勤管理制度
2015/08/04 职场文书
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS