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 相关文章推荐
杏林同学录(七)
Oct 09 PHP
PHP脚本中include文件出错解决方法
Nov 20 PHP
php中函数的形参与实参的问题说明
Sep 01 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
Aug 09 PHP
php中将汉字转换成拼音的函数代码
Sep 08 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
php实现购物车功能(下)
Jan 05 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
Nov 14 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
Feb 04 PHP
php中file_get_contents()函数用法实例
Feb 21 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
Jul 06 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 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
Knockoutjs 学习系列(二)花式捆绑
2016/06/07 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
python自动zip压缩目录的方法
2015/06/28 Python
遗传算法之Python实现代码
2017/10/10 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
如何基于python实现不邻接植花
2020/05/01 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
浅谈css3中的前缀
2016/07/20 HTML / CSS
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
华为智利官方商店:Huawei Chile
2020/05/09 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
初中女生自我鉴定
2013/12/19 职场文书
企业总经理任命书
2014/06/05 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis
python图像处理 PIL Image操作实例
2022/04/09 Python