第七节--类的静态成员


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的cURL快速入门教程 (小偷采集程序)
Jun 02 PHP
php中的三元运算符使用说明
Jul 03 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
Apr 08 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
Aug 07 PHP
php反射学习之依赖注入示例
Jun 14 PHP
PHP 7.4中使用预加载的方法详解
Jul 08 PHP
PHP命名空间用法实例分析
Sep 04 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如何透过ODBC来存取数据库
2006/10/09 PHP
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
php银联网页支付实现方法
2015/03/04 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
PHP调用其他文件中的类
2018/04/02 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
基于jQuery的弹出框插件
2012/03/18 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
使用python实现tcp自动重连
2017/07/02 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
大学生毕业的自我鉴定
2013/11/13 职场文书
应届生的求职推荐信范文
2013/11/30 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
地球上的星星观后感
2015/06/02 职场文书