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 相关文章推荐
使用VisualStudio开发php的图文设置方法
Aug 21 PHP
PHP项目开发中最常用的自定义函数整理
Dec 02 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
May 16 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
关于Sphinx创建全文检索的索引介绍
Jun 25 PHP
php读取文件内容的几种方法详解
Jun 26 PHP
laravel手动创建数组分页的实现代码
Jun 07 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 PHP
php修改word的实例方法
Nov 17 PHP
php解析非标准json、非规范json的方式实例
May 10 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和ACCESS写聊天室(四)
2006/10/09 PHP
让PHP更快的提供文件下载的代码
2012/06/13 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
js数组的操作指南
2014/12/28 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
react redux入门示例
2018/04/19 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
python中单例常用的几种实现方法总结
2018/10/13 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
python获取Linux发行版名称
2019/08/30 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
Python如何在bool函数中取值
2020/09/21 Python
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
西部世纪面试题
2014/12/05 面试题
写给女朋友的道歉信
2014/01/12 职场文书
安全协议书范本
2014/04/21 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
国家助学金感谢信
2015/01/21 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书