第七节 类的静态成员 [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函数utf8转gb2312编码
Dec 21 PHP
php中的实现trim函数代码
Mar 19 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
Aug 03 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 PHP
PHP list() 将数组中的值赋给变量的简单实例
Jun 13 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
PHP的mysqli_thread_id()函数讲解
Jan 24 PHP
PHP join()函数用法与实例讲解
Mar 11 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
jQuery示例收集
2010/11/05 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python常用知识点汇总
2016/05/08 Python
Python-嵌套列表list的全面解析
2016/06/08 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
详解Python中namedtuple的使用
2020/04/27 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
员工评语大全
2014/01/19 职场文书
环保建议书100字
2014/05/14 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
五年级学生期末评语
2014/12/26 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
教学副校长工作总结
2015/08/13 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python