第七节--类的静态成员


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页面间传递参数实例代码
Jun 05 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
回帖脱衣服的图片实现代码
Feb 15 PHP
php数据库备份还原类分享
Mar 20 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
thinkPHP中create方法与令牌验证实例浅析
Dec 08 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
php获取客户端IP及URL的方法示例
Feb 03 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
PHP编程实现阳历转换为阴历的方法实例
Aug 08 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 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获取网络上文件
2006/10/09 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
微信小程序 扎金花简单实例
2017/02/21 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
js异步上传多张图片插件的使用方法
2018/10/22 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
Python素数检测实例分析
2015/06/15 Python
Python的Django框架中的Context使用
2015/07/15 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
如何用python批量调整视频声音
2020/12/22 Python
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
机械绘图员岗位职责
2013/11/19 职场文书
感恩节活动方案
2014/01/27 职场文书
新闻专业学生的自我评价
2014/02/13 职场文书
营销学习心得体会
2014/09/12 职场文书
涨价通知怎么写
2015/04/23 职场文书
Redis分布式锁的7种实现
2022/04/01 Redis
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL