第七节--类的静态成员


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 相关文章推荐
玩转虚拟域名◎+ .
Oct 09 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
Jul 18 PHP
php生成扇形比例图实例
Nov 06 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
PHP中调用SVN命令更新网站方法
Jan 07 PHP
php实现有趣的人品测试程序实例
Jun 08 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
Mar 29 PHP
php求今天、昨天、明天时间戳的简单实现方法
Jul 28 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 PHP
php 类中的常量、静态属性、非静态属性的区别
Apr 09 PHP
Phpstorm+Xdebug断点调试PHP的方法
May 14 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
Dec 07 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实现长连接的方法与注意事项的问题
2013/05/10 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
php 的反射详解及示例代码
2016/08/25 PHP
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
Angular中支持SCSS的方法
2017/11/18 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
Python的Flask站点中集成xhEditor文本编辑器的教程
2016/06/13 Python
解决python中无法自动补全代码的问题
2018/12/04 Python
python中selenium操作下拉滚动条的几种方法汇总
2019/07/14 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
会议邀请函范文
2014/01/09 职场文书
公司租房协议书
2014/10/14 职场文书
旷工辞退通知书
2015/04/17 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技