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横向重复区域显示二法
Sep 25 PHP
zf框架的session会话周期及次数限制使用示例
Mar 13 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
PHP中创建图像并绘制文字的例子
Nov 19 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
PHP生成json和xml类型接口数据格式
May 17 PHP
PHP的Yii框架入门使用教程
Feb 15 PHP
CI操作cookie的方法分析(基于helper类库)
Mar 28 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 PHP
PHP函数引用返回的实例详解
Sep 11 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
详解php实现页面静态化原理
Jun 21 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
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
PHP代码优化的53个细节
2014/03/03 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
繁简字转换功能
2006/07/19 Javascript
JavaScript 创建对象
2009/07/17 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
图解Sublime Text3使用技巧
2015/12/21 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
2017/11/03 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
python中字符串前面加r的作用
2015/06/04 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
Python实现自动发送邮件功能
2021/03/02 Python
Python编程产生非均匀随机数的几种方法代码分享
2017/12/13 Python
在CentOS6上安装Python2.7的解决方法
2018/01/09 Python
便捷提取python导入包的属性方法
2018/10/15 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
python文件排序的方法总结
2020/09/13 Python
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
优秀中学生事迹材料
2014/01/31 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
五年级小学生评语
2014/12/26 职场文书
2016公司新年问候语
2015/11/11 职场文书
Python基础详解之描述符
2021/04/28 Python
Docker部署Mysql8的实现步骤
2022/07/07 Servers