第七节 类的静态成员 [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 相关文章推荐
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 PHP
php不用内置函数对数组排序的两个算法代码
Feb 08 PHP
php二维数组排序与默认自然排序的方法介绍
Apr 27 PHP
解析PHP 5.5 新特性
Jul 02 PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 PHP
php中 $$str 中 &quot;$$&quot; 的详解
Jul 06 PHP
必须收藏的23个php实用代码片段
Feb 02 PHP
php上传图片类及用法示例
May 11 PHP
php cookie工作原理与实例详解
Jul 18 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
Mar 06 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
关于laravel 日志写入失败问题汇总
Oct 17 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数组总结篇(一)
2008/09/30 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
javascript的内存管理详解
2013/08/07 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
python实现FTP服务器服务的方法
2017/04/11 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
公积金单位接收函
2014/01/11 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers