PHP_define和const的区别/获取所有常量get_defined_constant()
2019独角兽企业重金招聘Python工程师标准>>>
常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。常量默认为大小写敏感。通常常量标识符总是大写的。
可以用 define() 函数来定义常量。在 PHP 5.3.0 以后,可以使用 const 关键字在类定义的外部定义常量,先前版本const 关键字只能在类(class)中使用。一个常量一旦被定义,就不能再改变或者取消定义。
常量只能包含标量数据(boolean,integer,float 和 string)。 可以定义 resource 常量,但应尽量避免,因为会造成不可预料的结果。
可以简单的通过指定其名字来取得常量的值,与变量不同,不应该在常量前面加上 $ 符号。如果常量名是动态的,也可以用函数constant() 来获取常量的值。用
get_defined_constants() 可以获得所有已定义的常量列表。
常量和变量有如下不同:
·常量前面没有美元符号($);
·常量只能用 define() 函数定义,而不能通过赋值语句;
·常量可以不用理会变量的作用域而在任何地方定义和访问;
·常量一旦定义就不能被重新定义或者取消定义;
·常量的值只能是标量。
Example #1 定义常量
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // 输出 "Constant" 并发出一个提示性信息
?>
Example #2 使用关键字 const 定义常量
<?php
// 以下代码在 PHP 5.3.0 后可以正常工作
const CONSTANT = 'Hello World';
echo CONSTANT;
?>
Example #3 合法与非法的常量名
<?php
// 合法的常量名
define("FOO", "something");
define("FOO2", "something else");
define("FOO_BAR", "something more");
// 非法的常量名
define("2FOO", "something");
// 下面的定义是合法的,但应该避免这样做:(自定义常量不要以__开头)
// 也许将来有一天PHP会定义一个__FOO__的魔术常量
// 这样就会与你的代码相冲突
define("__FOO__", "something");
?>
【问】在php中定义常量时,const与define的区别?
【答】使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。
(1).const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量。
(2).const可在类中使用,define不能。
(3).const不能在条件语句中定义常量。
例如:
if (...){
const FOO = 'BAR'; // 无效的invalid
}
if (...) {
define('FOO', 'BAR'); // 有效的valid
}
(4).const采用一个普通的常量名称,define可以采用表达式作为名称。
const FOO = 'BAR';
for ($i = 0; $i < 32; ++$i) {
define('BIT_' . $i, 1 << $i);
}
(5).const只能接受静态的标量,而define可以采用任何表达式。
例如:
const BIT_5 = 1 << 5; // 无效的invalid
define('BIT_5', 1 << 5); // 有效的valid
(6).const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。
例如:
define('FOO', 'BAR', true);
echo FOO; // BAR
echo foo; // BAR
相关函数:
define — 定义一个常量
说明:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ]
参数:
name :常量名。
value :常量的值;仅允许标量和 null。标量的类型是 integer, float,string 或者 boolean。 也能够定义常量值的类型为 resource ,但并不推荐这么做,可能会导致未
知状况的发生。
case_insensitive :如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。比如, CONSTANT 和 Constant 代表了不同的值。(Note: 大小写不敏感的常量以小写
的方式储存。)
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE.
constant — 返回一个常量的值
说明:
mixed constant ( string $name )
通过 name 返回常量的值。当你不知道常量名,却需要获取常量的值时,constant() 就很有用了。也就是常量名储存在一个变量里,或者由函数返回常量名。该函数也适用
class constants。
参数:
name :常量名。
返回值:
返回常量的值。如果常量未定义则返回 NULL。
defined — 检查某个名称的常量是否存在
说明:
bool defined ( string $name )
检查该名称的常量是否已定义。
Note: 如果你要检查一个变量是否存在,请使用 isset()。 defined() 函数仅对 constants 有效。如果你要检测一个函数是否存在,使用 function_exists()。
参数:
name :常量的名称。
返回值:
如果该名称的常量已定义,返回 TRUE;未定义则返回 FALSE。
get_defined_constants:返回所有被定义的常量
Returns an associative array with the names of all the constants and their values
以关联数组返回常量名和常量的值。这包括那些由扩展以及由define()函数创建的常量。
转载于:https://my.oschina.net/miaowang/blog/349380
PHP_define和const的区别/获取所有常量get_defined_constant()相关推荐
- const 常量_var,let,const 的区别?
为了更好的了解var let const 的区别,我们就来简单的了解它们的过程 相信有很多人都会面临面试官问的这个问题 很多的同学都是简单的认为 var声明的变量会提升,而let const 不会,虽 ...
- C++/C中const的区别(常量和常变量)
1. C语言中被const修饰的叫常变量 #include <stdio.h>void main() {const int v; //ok } C语言中,const修饰的量可以不初始化,但 ...
- var 、let 和 const 的区别
var 声明的范围是函数作用域,let 和 const 声明的范围是块作用域 var 声明的变量会被提升到函数作用域的顶部,let 和 const 声明的变量不存在提升,且具有暂时性死区特征 var ...
- C++ const关键字的总结(全局/局部变量、修饰指针和引用、成员函数和数据成员、修饰类对象、const与宏定义的区别、Static与Const的区别)
const关键字 const关键字 1.什么是const 2.使用原理 2.1.const全局/局部变量 2.2.cosnt修饰指针和引用 2.3.const修饰函数参数 2.4.const修饰函数返 ...
- C++:const的使用(普通常量、指针、引用)
const声明的是常量,常量基本上只能读不能写.其实x也是能写的,但他只是在x初始化的时候完成了写操作. int main() {const int x=4;//x是const int型.在初始化时写 ...
- const int * 、int * const、int const* 、const int a(){ } 和int a()const { }的区别和联系
前言:很多人都把const int * .int * const.int const* 的区别和联系搞混,我自己在学习C++的过程中,也经常性 弄不 清楚,今天特意总结一下,作为学习 ...
- readonly和const的区别
readonly与const的区别 1.const常量在声明的同时必须赋值,readonly在声明时可以不赋值 2.readonly只能在声明时或在构造方法中赋值(readonly的成员变量可以根据调 ...
- 谈谈var变量提升以及var,let,const的区别
1.首先我们理解一个''提升''这个概念,意思就是无论var aaa ="我是var"这行代码在哪个位置,变量的声明都会被提升到所在作用域最前端执行,而变量的赋值则是在当前行执行, ...
- const char*, char const*, char*const的区别
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目. 事实上这个概念谁都有,只是三种声明方式非常相似很容易记混. Bjarne在他的T ...
最新文章
- java 服务端客户端数据传输出现乱码
- 6位顺序号生成_分布式id生成策略,我和面试官扯了一个半小时
- 当不同公司的产品经理在一块聊天,会聊什么?
- MVC中Controller弹出提示框
- 小事也能看出一个人的能力
- mysql 删除数据 分页_PHP实现对mysql数据库内容分页显示
- 如何在Bash脚本中将Heredoc写入文件?
- JavaScript之基础语法整理
- ASP.NET MVC5----了解我们使用的@HTML帮助类
- vs未能加载项目文件。未能找到路径 c#笔记5
- 设计模式之访问者模式(C# / JavaScript / PHP / Java / Python 演示代码)
- 银联在线java接口开发_银联在线Java接口开发
- 网络墨卡托投影的前世今生
- PHP微信扫码关注公众号并授权登录源码
- win10天干五合工具
- sublimelinter java_学习使用sublime插件sublimeLinter
- Python C/S 网络编程(二)之 UDP 实现英汉词典查询小程序
- java treeview控件_【TreeView下载】TreeView控件 v1.1.6 官方版-开心电玩
- FANUC机器人如何将示教器的语言切换成中文?
- 微信小程序 获取设备信息 API
热门文章
- argparse.ArgumentParser
- xz命令--Linux命令应用大词典729个命令解读
- gulp实现打包js/css/img/html文件,并对js/css/img文件加上版本号
- 47. Permutations II 1
- Mysql 乱码的解决
- 利用返回引用来操作结构体
- iptables —— Iptables防火墙规则使用梳理
- Nginx http keepalive提升链接效率
- 二进制搭建kubernetes多master集群【三、配置k8s master及高可用】
- [转]文件IO详解(二)---文件描述符(fd)和inode号的关系