Laracon EU Online 2021

语法

在PHP 5.3.0 之后的版本中,你可以用 define() 函数,或 const 两种方法来定义一个常量。函数 define() 允许将常量定义为一个表达式,而 const 关键字有一些限制,具体可参见下述章节。一个常量一旦被定义,就不能再改变或者取消定义。

使用 const 关键字定义常量时,PHP 5.6 之前只能包含标量数据(booleanintegerfloatstring)。从 PHP 5.6 开始,可以将常量定义为一个表达式,也可以定义为一个 array。还可以定义 resource 为常量,但应尽量避免,因为可能会造成不可预料的结果。

可以简单的通过指定其名字来取得常量的值,与变量不同,不应该在常量前面加上 $ 符号。如果常量名是动态的,也可以用函数 constant() 来获取常量的值。用 get_defined_constants() 可以获得所有已定义的常量列表。

Note: 常量和(全局)变量在不同的名字空间中。这意味着例如 TRUE$TRUE 是不同的。

如果使用了一个未定义的常量,PHP 假定想要的是该常量本身的名字,如同用字符串调用它一样(CONSTANT 对应 "CONSTANT")。此方法已在 PHP 7.2.0 中被废弃,会抛出一个 E_WARNING 级错误。(之前版本会发出一个 E_NOTICE 级的错误。)参见手册中为什么 $foo[bar] 是错误的(除非事先用 define()bar 定义为一个常量)。这不适用于 (完全)限定的常量,如果未定义,将引发致命错误。如果仅是检查是否定义了某常量,请使用 defined() 函数。

常量和变量有如下不同:

  • 常量前面没有美元符号($);
  • PHP 5.3 之前,常量只能用 define() 函数定义,而不能通过赋值语句;
  • 常量可以不用理会变量的作用域而在任何地方定义和访问;
  • 常量一旦定义就不能被重新定义或者取消定义;
  • 常量的值只能是标量值。从 PHP 5.6 开始可以用 const 关键字来定义数组常量,从 PHP 7 开始也可以用 define() 函数来定义。你可以在常量标量表达式中使用数组(例如 const FOO = array(1,2,3)[0];),但是要求最终的结果必须是一个允许的类型的值。

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;

// PHP 5.6.0 后的写法
const ANOTHER_CONST CONSTANT.'; Goodbye World';
echo 
ANOTHER_CONST;

const 
ANIMALS = array('dog''cat''bird');
echo 
ANIMALS[1]; // 将输出 "cat"

// PHP 7 中的写法
define('ANIMALS', array(
    
'dog',
    
'cat',
    
'bird'
));
echo 
ANIMALS[1]; // 将输出 "cat"
?>

?>

Note:

和使用 define() 来定义常量相反的是,使用 const 关键字定义常量必须处于最顶端的作用区域,因为用此方法是在编译时定义的。这就意味着不能在函数内,循环内以及 iftry/catch 语句之内用 const 来定义常量。

Note:

使用 const 关键字定义的常量总是大小写敏感的,而使用 define() 函数定义的常量可能不区分大小写。

参见类常量

add a note add a note

User Contributed Notes 4 notes

up
12
login at (two)view dot de
3 years ago
Just a quick note:
From PHP7 on you can even define a multidimensional Array as Constant:

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

does work as expected.
up
1
halfhearted13 at gmail dot com
3 months ago
Constants of constant :

<?php

const foo = hello;
const
bar = foo;
const
bd = bar;

echo
"bd = " .bd;   // Prints out: Hello

?>
up
-13
mh at hanft dot de
1 year ago
With PHP 5.6, multi-dimensional arrays are also possible if you use "const" instead of "define". So,

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul')));

won't work with PHP 5.6, but

const QUARTLIST=array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

will.
up
-8
privat at ulrich-kapp dot de
10 months ago
const ArrayFromTextfile = file("mytextfile.txt", FILE_IGNORE_NEW_LINES);

does not work, it throws an error:
Fatal error: Constant expression contains invalid operations in php shell code on line …

Instead use:

define ("ArrayFromTextfile", file("mytextfile.txt", FILE_IGNORE_NEW_LINES));

print_r(ArrayFromTextfile);

Result:
Array
(
    [0] ⇨ Line 1
    [1] ⇨ Line 2
    [2] ⇨ Line 3
    [3] => …
)
To Top