第七节 类的静态成员 [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的面向对象编程
Oct 09 PHP
php 生成WML页面方法详解
Aug 09 PHP
在PHP中使用反射技术的架构插件使用说明
May 18 PHP
PHP实现获取图片颜色值的方法
Jul 11 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
php自定义apk安装包实例
Oct 20 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
Oct 21 PHP
php根据生日计算年龄的方法
Jul 13 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
php实现的PDO异常处理操作分析
Dec 27 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
May 20 PHP
php 解析非标准json、非规范json
Apr 01 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
用PHP函数解决SQL injection
2006/10/09 PHP
PHP的栏目导航程序
2006/10/09 PHP
PHP+DBM的同学录程序(2)
2006/10/09 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
多广告投放代码 推荐
2006/11/13 Javascript
js CSS操作方法集合
2008/10/31 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
python单例设计模式实现解析
2020/01/07 Python
python 实现逻辑回归
2020/12/30 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
民用住房租房协议书
2014/10/29 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
2016年大学生寒假社会实践心得体会
2015/10/09 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang