第七节--类的静态成员


Posted in PHP onNovember 16, 2006

/*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢 
| = 欢迎批评指正,希望和所有PHP爱好者共同进步! 
| = PHP5研究中心: http://blog.csdn.net/haohappy2004
+-------------------------------------------------------------------------------+
*/

第七节--类的静态成员

类的静态成员与一般的类成员不同: 静态成员与对象的实例无关,只与类本身有关. 他们用来实现类要封装的功能和数据,但不包括特定对象的功能和数据. 静态成员包括静态方法和静态属性.

静态属性包含在类中要封装的数据,可以由所有类的实例共享. 实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量

我们在下例中使用了一个静态属性Counter::$count. 它属于Counter类,而不属于任何Counter的实例.你不能用this来引用它,但可以用self或其它有效的命名表达. 在例子中,getCount方法返回self::$count,而不是Counter::$count.

静态方法则实现类需要封装的功能,与特定的对象无关. 静态方法非常类似于全局函数. 静态方法可以完全访问类的属性,也可以由对象的实例来访问,不论访问的限定语是否是什么.

在6.3例中,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

<?php   
   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() . "<br>\n");   
   //输出类的版本属性   
   print("Version used: " . Counter::VERSION . "<br>\n");   
?>  
PHP 相关文章推荐
优化使用mysql存储session的php代码
Jan 10 PHP
php学习 函数 课件
Jun 15 PHP
功能齐全的PHP发送邮件类代码附详细说明
Jul 10 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
Jun 23 PHP
Memcached常用命令以及使用说明详解
Jun 27 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
thinkphp的URL路由规则与配置实例
Nov 26 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
php微信开发之关注事件
Jun 14 PHP
laravel-admin select框默认选中的方法
Oct 03 PHP
第六节--访问属性和方法
Nov 16 #PHP
第五节--克隆
Nov 16 #PHP
第四节--构造函数和析构函数
Nov 16 #PHP
第三节--定义一个类
Nov 16 #PHP
第二节--PHP5 的对象模型
Nov 16 #PHP
第一节--面向对象编程
Nov 16 #PHP
MYSQL数据库初学者使用指南
Nov 16 #PHP
You might like
PHP中的output_buffering详细介绍
2014/09/27 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
Python使用Django实现博客系统完整版
2020/09/29 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
用python生成1000个txt文件的方法
2018/10/25 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
使用python turtle画高达
2020/01/19 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
《姥姥的剪纸》教学反思
2014/02/25 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
教师工作总结范文2014
2014/11/10 职场文书
学校财务管理制度
2015/08/04 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
Win10 Anaconda安装python-pcl
2022/04/29 Servers