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实现采集程序原理和简单示例代码
Mar 18 PHP
防止MySQL注入或HTML表单滥用的PHP程序
Jan 21 PHP
php学习之数据类型之间的转换代码
May 29 PHP
php中选择什么接口(mysql、mysqli)访问mysql
Feb 06 PHP
PHP随机字符串生成代码(包括大小写字母)
Jun 24 PHP
php操作xml
Oct 27 PHP
PHP数据库链接类(PDO+Access)实例分享
Dec 05 PHP
php设置允许大文件上传示例代码
Mar 10 PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 PHP
Thinkphp单字母函数使用指南
May 08 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 PHP
详解PHP设计模式之依赖注入模式
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中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
DOM相关内容速查手册
2007/02/07 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
用JS实现3D球状标签云示例代码
2013/12/01 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
Vue按需加载的具体实现
2017/12/02 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
使用Mock.js生成前端测试数据
2020/12/13 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
python局域网ip扫描示例分享
2014/04/03 Python
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
python是怎么被发明的
2020/06/15 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
幼儿园数学教学反思
2014/02/02 职场文书
狼和鹿教学反思
2014/02/05 职场文书
晚会闭幕词
2015/01/28 职场文书
党校毕业个人总结
2015/02/28 职场文书
社会实践活动总结格式
2015/05/11 职场文书