第七节 类的静态成员 [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 相关文章推荐
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
php中神奇的fastcgi_finish_request
May 02 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 PHP
基于php 随机数的深入理解
Jun 05 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
Jun 07 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
Jun 29 PHP
php写入、删除与复制文件的方法
Jun 20 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
php 常用的系统函数
Feb 07 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
Jan 20 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
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
PDO::errorCode讲解
2019/01/28 PHP
javascript 变量作用域 代码分析
2009/06/26 Javascript
使用JQuery进行跨域请求
2010/01/25 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
jQuery实现滚动效果
2017/11/17 jQuery
如何在vue中使用ts的示例代码
2018/02/28 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
Python加密方法小结【md5,base64,sha1】
2017/07/13 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
Python中return self的用法详解
2018/07/27 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
python中adb有什么功能
2020/06/07 Python
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
办护照工作证明
2014/10/01 职场文书
公司离职证明范本
2014/10/17 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
图文详解matlab原始处理图像几何变换
2021/07/09 Python