第七节 类的静态成员 [7]


Posted in PHP onOctober 09, 2006

类的静态成员与一般的类成员不同: 静态成员与对象的实例无关,只与类本身有关. 他们用来实现类要封装的功能和数据,但不包括特定对象的功能和数据. 静态成员包括静态方法和静态属性.

静态属性包含在类中要封装的数据,可以由所有类的实例共享. 实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量

我们在下例中使用了一个静态属性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+mysql实现无限级分类 | 树型显示分类关系
Nov 19 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
Mar 13 PHP
php自动加载的两种实现方法
Jun 21 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
单点登录 Ucenter示例分析
Oct 29 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
Jan 08 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
thinkphp自定义权限管理之名称判断方法
Apr 01 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 PHP
PHP 出现 http500 错误的解决方法
Mar 09 PHP
用PHP实现文件上传二法
Oct 09 #PHP
PHP安装全攻略:APACHE
Oct 09 #PHP
用PHP生成自己的LOG文件
Oct 09 #PHP
VFP与其他应用程序的集成
Oct 09 #PHP
PHP中在数据库中保存Checkbox数据(1)
Oct 09 #PHP
分页显示Oracle数据库记录的类之二
Oct 09 #PHP
分页显示Oracle数据库记录的类之一
Oct 09 #PHP
You might like
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
PHP.MVC的模板标签系统(一)
2006/09/05 PHP
header()函数使用说明
2006/11/23 PHP
php一个找二层目录的小东东
2012/08/02 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
PHP实现微信发红包程序
2015/08/24 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
财务会计人员求职的自我评价
2014/01/13 职场文书
农村婚礼主持词
2014/03/13 职场文书
公开服务承诺制度
2014/03/26 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
环保志愿者活动总结
2014/06/27 职场文书
文员岗位职责
2015/02/04 职场文书
德劲DE1108畅想
2021/04/22 无线电