第七节--类的静态成员


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 相关文章推荐
自动把纯文本转换成Web页面的php代码
Aug 27 PHP
php allow_url_include的应用和解释
Apr 22 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
Nov 21 PHP
PHP的可变变量名的使用方法分享
Feb 05 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
Jun 03 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
浅析php工厂模式
Nov 25 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
php的常量和变量实例详解
Jun 27 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
在线短消息收发的程序,不用数据库
2006/10/09 PHP
快速开发一个PHP扩展图文教程
2008/12/12 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
php简单实现MVC
2015/02/05 PHP
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
2012/01/15 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
详解Python中的__new__()方法的使用
2015/04/09 Python
浅谈python中get pass用法
2019/03/19 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
python3实现微型的web服务器
2019/09/03 Python
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
serialVersionUID具有什么样的特征
2014/02/20 面试题
学年自我鉴定范文
2013/10/01 职场文书
五一手机促销方案
2014/03/08 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
一年级评语大全
2014/04/23 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
实现一个简单得数据响应系统
2021/11/11 Javascript
React四级菜单的实现
2022/04/08 Javascript