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()相关推荐

  1. const 常量_var,let,const 的区别?

    为了更好的了解var let const 的区别,我们就来简单的了解它们的过程 相信有很多人都会面临面试官问的这个问题 很多的同学都是简单的认为 var声明的变量会提升,而let const 不会,虽 ...

  2. C++/C中const的区别(常量和常变量)

    1. C语言中被const修饰的叫常变量 #include <stdio.h>void main() {const int v; //ok } C语言中,const修饰的量可以不初始化,但 ...

  3. var 、let 和 const 的区别

    var 声明的范围是函数作用域,let 和 const 声明的范围是块作用域 var 声明的变量会被提升到函数作用域的顶部,let 和 const 声明的变量不存在提升,且具有暂时性死区特征 var ...

  4. C++ const关键字的总结(全局/局部变量、修饰指针和引用、成员函数和数据成员、修饰类对象、const与宏定义的区别、Static与Const的区别)

    const关键字 const关键字 1.什么是const 2.使用原理 2.1.const全局/局部变量 2.2.cosnt修饰指针和引用 2.3.const修饰函数参数 2.4.const修饰函数返 ...

  5. C++:const的使用(普通常量、指针、引用)

    const声明的是常量,常量基本上只能读不能写.其实x也是能写的,但他只是在x初始化的时候完成了写操作. int main() {const int x=4;//x是const int型.在初始化时写 ...

  6. const int * 、int * const、int const* 、const int a(){ } 和int a()const { }的区别和联系

    前言:很多人都把const int * .int * const.int const* 的区别和联系搞混,我自己在学习C++的过程中,也经常性          弄不 清楚,今天特意总结一下,作为学习 ...

  7. readonly和const的区别

    readonly与const的区别 1.const常量在声明的同时必须赋值,readonly在声明时可以不赋值 2.readonly只能在声明时或在构造方法中赋值(readonly的成员变量可以根据调 ...

  8. 谈谈var变量提升以及var,let,const的区别

    1.首先我们理解一个''提升''这个概念,意思就是无论var aaa ="我是var"这行代码在哪个位置,变量的声明都会被提升到所在作用域最前端执行,而变量的赋值则是在当前行执行, ...

  9. const char*, char const*, char*const的区别

    const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目. 事实上这个概念谁都有,只是三种声明方式非常相似很容易记混. Bjarne在他的T ...

最新文章

  1. java 服务端客户端数据传输出现乱码
  2. 6位顺序号生成_分布式id生成策略,我和面试官扯了一个半小时
  3. 当不同公司的产品经理在一块聊天,会聊什么?
  4. MVC中Controller弹出提示框
  5. 小事也能看出一个人的能力
  6. mysql 删除数据 分页_PHP实现对mysql数据库内容分页显示
  7. 如何在Bash脚本中将Heredoc写入文件?
  8. JavaScript之基础语法整理
  9. ASP.NET MVC5----了解我们使用的@HTML帮助类
  10. vs未能加载项目文件。未能找到路径 c#笔记5
  11. 设计模式之访问者模式(C# / JavaScript / PHP / Java / Python 演示代码)
  12. 银联在线java接口开发_银联在线Java接口开发
  13. 网络墨卡托投影的前世今生
  14. PHP微信扫码关注公众号并授权登录源码
  15. win10天干五合工具
  16. sublimelinter java_学习使用sublime插件sublimeLinter
  17. Python C/S 网络编程(二)之 UDP 实现英汉词典查询小程序
  18. java treeview控件_【TreeView下载】TreeView控件 v1.1.6 官方版-开心电玩
  19. FANUC机器人如何将示教器的语言切换成中文?
  20. 微信小程序 获取设备信息 API

热门文章

  1. argparse.ArgumentParser
  2. xz命令--Linux命令应用大词典729个命令解读
  3. gulp实现打包js/css/img/html文件,并对js/css/img文件加上版本号
  4. 47. Permutations II 1
  5. Mysql 乱码的解决
  6. 利用返回引用来操作结构体
  7. iptables —— Iptables防火墙规则使用梳理
  8. Nginx http keepalive提升链接效率
  9. 二进制搭建kubernetes多master集群【三、配置k8s master及高可用】
  10. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系