第七节 类的静态成员 [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 相关文章推荐
文件上传的实现
Oct 09 PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
php切割页面div内容的实现代码分享
Jul 31 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
php json与xml序列化/反序列化
Oct 28 PHP
php object转数组示例
Jan 15 PHP
php curl_init函数用法
Jan 31 PHP
php表单提交与$_POST实例分析
Jan 26 PHP
Yii操作数据库实现动态获取表名的方法
Mar 29 PHP
微信公众号之主动给用户发送消息功能
Jun 22 PHP
解决tp5在nginx下修改配置访问的问题
Oct 16 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
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
Python使用matplotlib绘制动画的方法
2015/05/20 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
python实现画出e指数函数的图像
2019/11/21 Python
用python3读取python2的pickle数据方式
2019/12/25 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
非常详细的C#面试题集
2016/07/13 面试题
机电一体化职业规划书
2014/01/07 职场文书
单位委托书怎么写
2014/08/02 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
二年级数学教学反思
2016/02/16 职场文书
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL