第七节--类的静态成员


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 相关文章推荐
PHP 5.0 Pear安装方法
Dec 06 PHP
php中$this-&amp;gt;含义分析
Nov 29 PHP
PHP XML操作类DOMDocument
Dec 16 PHP
php 高效率写法 推荐
Feb 21 PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 PHP
Laravel 5框架学习之Blade 简介
Apr 08 PHP
PHP模块化安装教程
Jun 01 PHP
Laravel使用消息队列需要注意的一些问题
Dec 13 PHP
PHP中PDO事务处理操作示例
May 02 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
Oct 15 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 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 执行系统命令的方法
2009/07/07 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
php输入数据统一类实例
2015/02/23 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
js获取图片大小的函数代码
2011/09/20 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
wxPython实现带颜色的进度条
2019/11/19 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
Python项目跨域问题解决方案
2020/06/22 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
python 实现汉诺塔游戏
2020/11/28 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
高中生学习生活的自我评价
2013/11/27 职场文书
银行简历自我评价
2014/02/11 职场文书
反四风对照检查材料
2014/09/22 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
银行资信证明
2015/06/17 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
筑梦中国心得体会
2016/01/18 职场文书
基于Python实现射击小游戏的制作
2022/04/06 Python