第七节 类的静态成员 [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 相关文章推荐
推荐文章系统(一)
Oct 09 PHP
PHP怎样调用MSSQL的存储过程
Oct 09 PHP
社区(php&amp;&amp;mysql)二
Oct 09 PHP
php at(@)符号的用法简介
Jul 11 PHP
详解PHP中strlen和mb_strlen函数的区别
Mar 07 PHP
php去除数组中重复数据
Nov 18 PHP
Laravel5中contracts详解
Mar 02 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
一个实用的php验证码类
Jul 06 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 PHP
php实现微信支付之退款功能
May 30 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 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中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
调整PHP的性能
2013/10/30 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
JavaScript学习笔记之数组求和方法
2016/03/23 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
2017/05/02 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
Python os模块学习笔记
2015/06/21 Python
python简单实现刷新智联简历
2016/03/30 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
Django使用rest_framework写出API
2020/05/21 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
商场活动策划方案
2014/01/24 职场文书
工商管理专业自荐信
2014/06/03 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
班主任寄语2015
2015/02/26 职场文书
社区工作者个人总结
2015/02/28 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
python之json文件转xml文件案例讲解
2021/08/07 Python