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 数字左侧自动补0
Mar 31 PHP
php 删除cookie和浏览器重定向
Mar 16 PHP
PHP教程 变量定义
Oct 23 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
smarty简单入门实例
Nov 28 PHP
php多次include后导致全局变量global失效的解决方法
Feb 28 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
php开发微信支付获取用户地址
Oct 04 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
php网页版聊天软件实现代码
Aug 12 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
Apr 12 PHP
laravel 解决Validator使用中出现的问题
Oct 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
PHP开发中常用的8个小技巧
2008/08/27 PHP
PHP基础学习小结
2011/04/17 PHP
php swoft框架实例用法
2020/12/22 PHP
短信提示使用 特效
2007/01/19 Javascript
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
在vue-cli中组件通信的方法
2017/12/16 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
python的Template使用指南
2014/09/11 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
Django设置Postgresql的操作
2020/05/14 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
行政部总经理岗位职责
2014/01/04 职场文书
教导处工作制度
2014/01/18 职场文书
教师求职信
2014/06/17 职场文书
宣传普通话标语
2014/06/27 职场文书
学习十八大宣传标语
2014/10/09 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
小学语文复习计划
2015/01/19 职场文书
美术教师求职信范文
2015/03/20 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python