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 相关文章推荐
thinkphp控制器调度使用示例
Feb 24 PHP
分享最受欢迎的5款PHP框架
Nov 27 PHP
php定义参数数量可变的函数用法实例
Mar 16 PHP
Yii使用Captcha验证码的方法
Dec 28 PHP
php求数组全排列,元素所有组合的方法
May 05 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 PHP
PHP共享内存使用与信号控制实例分析
May 09 PHP
php链式操作的实现方式分析
Aug 12 PHP
laravel实现上传图片并在页面显示的例子
Oct 14 PHP
PHP加MySQL消息队列深入理解
Feb 27 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
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
PHP Token(令牌)设计
2008/03/15 PHP
php中显示数组与对象的实现代码
2011/04/18 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
布同 统计英文单词的个数的python代码
2011/03/13 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
探亲假请假条
2014/04/11 职场文书
死亡证明书样本说明
2014/10/18 职场文书
学生个人总结范文
2015/02/15 职场文书
工作自我评价范文
2015/03/05 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
TensorFlow的自动求导原理分析
2021/05/26 Python
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL