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 相关文章推荐
openflashchart 2.0 简单案例php版
May 21 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
ThinkPHP之N方法实例详解
Jun 20 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 PHP
php实现发送微信模板消息的方法
Mar 07 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 PHP
Yii2框架使用计划任务的方法
May 25 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
PHP更安全的密码加密机制Bcrypt详解
Jun 18 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
PHP实现的数据对象映射模式详解
Mar 20 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 禁止页面缓存输出
2009/01/07 PHP
PHP中array_slice函数用法实例详解
2014/11/25 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
vue模式history下在iis中配置流程
2019/04/17 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
SQL Server面试题
2016/10/17 面试题
公司市场部岗位职责
2013/12/02 职场文书
幼儿园元旦活动感言
2014/03/02 职场文书
电力培训心得体会
2014/09/02 职场文书
2015年少先队活动总结
2015/03/25 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
Python中递归以及递归遍历目录详解
2021/10/24 Python
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript