第七节 类的静态成员 [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用户指南-cookies部分
Oct 09 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
php加密解密实用类分享
Jan 07 PHP
分享下php5类中三种数据类型的区别
Jan 26 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
PHP中STDCLASS用法实例分析
Nov 11 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
Apr 20 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
PHP聊天室简单实现方法详解
Dec 08 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 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迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
Python求凸包及多边形面积教程
2020/04/12 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
幼儿教师师德演讲稿
2014/05/06 职场文书
师范学院毕业生求职信
2014/06/24 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP