php类常量的使用详解


Posted in PHP onJune 08, 2013

可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。

常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。

接口(interface)中也可以定义常量。更多示例见文档中的接口部分。

自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。

Example #1 定义和使用一个类常量

<?php
class MyClass
{
  const constant = 'constant value';
  function showConstant() {
    echo self::constant . "\n";
  }
}

echo MyClass::constant . "\n";

$classname = "MyClass";
echo $classname::constant . "\n"; // 自 5.3.0 起

$class = new MyClass();
$class->showConstant();

echo $class::constant."\n"; // 自 PHP 5.3.0 起
?>

Example #2 静态数据示例

<?php
class foo {
  // 自 PHP 5.3.0 起
  const bar = <<<'EOT'
bar
EOT;
}
?>

和 heredoc 不同,nowdoc 可以用在任何静态数据中。

Note:

Nowdoc 支持是在 PHP 5.3.0 新增的。

更多可以参考这篇文章:http://php.net/manual/zh/language.oop5.constants.php#language.oop5.constants

注意:不像其他的面向对象编程语言,在php中,类不能对某个属性变量使用final修饰符。
如果要声明某个属性为常量,可以使用const关键字,并且无需使用美元符号作为变量名前缀,也无需使用访问权限修饰符。常量意味着虽然可以访问该变量,但不能修改该变量的值。例如下边的代码声明了常量属性con_var:

<?php
class Foo{
 const con_var="常量属性的值不能被修改<br />";
 public function method_a(){
 echo (self::con_var);
 }
}
echo(Foo::con_var);
$myFoo=new Foo();
echo ($myFoo->method_a());
?>

常量属性不能使用对象访问,仅能使用类访问,在类本体内,可以使用“self::常量名”,在类本体外可以使用“类名::常量名”。

PHP 相关文章推荐
php md5下16位和32位的实现代码
Apr 09 PHP
php的正则处理函数总结分析
Jun 20 PHP
基于PHP+Ajax实现表单验证的详解
Jun 25 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
PHP入门经历和学习过程分享
Apr 11 PHP
php读取大文件示例分享(文件操作类)
Apr 13 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
PHP日志LOG类定义与用法示例
Sep 06 PHP
PHP实现微信提现功能
Sep 30 PHP
深入分析php中接口与抽象类的区别
Jun 08 #PHP
探讨PHP中this,self,parent的区别详解
Jun 08 #PHP
深入php self与$this的详解
Jun 08 #PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
Jun 07 #PHP
解析dedeCMS验证码的实现代码
Jun 07 #PHP
探讨php中header的用法详解
Jun 07 #PHP
php简单浏览目录内容的实现代码
Jun 07 #PHP
You might like
php下mysql数据库操作类(改自discuz)
2010/07/03 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
跨浏览器的事件对象介绍
2012/06/27 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
JavaScript中的 new 命令
2019/05/22 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
介绍Python中的fabs()方法的使用
2015/05/14 Python
python实现微信远程控制电脑
2018/02/22 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
Python延时操作实现方法示例
2018/08/14 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
python zip()函数使用方法解析
2019/10/31 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
小学教师自我鉴定
2013/11/07 职场文书
工程采购员岗位职责
2014/03/09 职场文书
护理医院见习报告
2014/11/03 职场文书
高三教师工作总结2015
2015/07/21 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL