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 相关文章推荐
第二节 对象模型 [2]
Oct 09 PHP
解析thinkphp的左右值无限分类
Jun 20 PHP
php function用法如何递归及return和echo区别
Mar 07 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
php实现四舍五入的方法小结
Mar 03 PHP
php一个解析字符串排列数组的方法
May 12 PHP
php版阿里云OSS图片上传类详解
Dec 01 PHP
php实现的XML操作(读取)封装类完整实例
Feb 23 PHP
php实现mysql连接池效果实现代码
Jan 25 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
php获取Google机器人访问足迹的方法
2015/04/15 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
2019/09/04 Python
Python pickle模块实现对象序列化
2019/11/22 Python
python绘制雪景图
2019/12/16 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
python画图常规设置方式
2020/03/05 Python
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
学校门卫工作职责
2013/12/07 职场文书
大学生简短的自我评价
2014/09/12 职场文书
女性健康讲座主持词
2015/07/04 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
pytorch MSELoss计算平均的实现方法
2021/05/12 Python
Python序列化模块JSON与Pickle
2022/06/05 Python