第七节 类的静态成员 [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脚本
Nov 26 PHP
PHP开发入门教程之面向对象
Dec 05 PHP
php intval的测试代码发现问题
Jul 27 PHP
PHP 文件扩展名 获取函数
Jun 03 PHP
php小偷相关截取函数备忘
Nov 28 PHP
php文件上传表单摘自drupal的代码
Feb 15 PHP
php实现用户在线时间统计详解
Oct 08 PHP
PHP读书笔记_运算符详解
Jul 01 PHP
浅谈PHP命令执行php文件需要注意的问题
Dec 16 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
Aug 21 PHP
php数组和链表的区别总结
Sep 20 PHP
PHP数组基本用法与知识点总结
Jun 02 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
德生H-501的评价与改造
2021/03/02 无线电
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
php解析url的三个示例
2014/01/20 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
python 切换root 执行命令的方法
2019/01/19 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
使用Python构造hive insert语句说明
2020/06/06 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
失业者真诚求职信范文
2013/12/25 职场文书
师德师风的心得体会
2014/09/02 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
微信搭讪开场白
2015/05/28 职场文书
学困生转化工作总结
2015/08/13 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
mysql 索引合并的使用
2021/08/30 MySQL
linux目录管理方法介绍
2022/06/01 Servers