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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
php 带逗号千位符数字的处理方法
Jan 10 PHP
PHPThumb PHP 图片缩略图库
Mar 11 PHP
解析php中curl_multi的应用
Jul 17 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
Oct 26 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
Feb 18 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
Apr 10 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
thinkphp中ajax与php响应过程详解
Dec 08 PHP
php实现的xml操作类
Jan 15 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
Jul 14 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 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者的疑难问答(1)
2006/10/09 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
Yii框架表单模型和验证用法
2016/05/20 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
php通过各种函数判断0和空
2020/07/04 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
JavaScript+html5 canvas制作色彩斑斓的正方形效果
2016/01/27 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python MysqlDb模块安装及其使用详解
2018/02/23 Python
python处理数据,存进hive表的方法
2018/07/04 Python
python os模块简单应用示例
2019/05/23 Python
浅谈Python 参数与变量
2020/06/20 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
烹调加工管理制度
2014/02/04 职场文书
经济纠纷起诉状
2015/05/20 职场文书
校运会新闻稿
2015/07/17 职场文书
工作感想范文
2015/08/07 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书