PHP:const 和 defind 的区别

来源:互联网 发布:c语言map容器 编辑:程序博客网 时间:2024/06/07 20:20

相同点:两者都能定义常量

const  FOO = ‘BAR‘;defind(‘FOO‘,‘BAR‘);

const 缺点

– const defind 1 (位置) 必须声明在top-level-scopc (顶级域) 无限制 2 (表达式) 接受一个静态的标量类型(number,string,true.false,null,FILE,……) 接受任何表达式 3 (常量名)接受一个plain(?不知道翻译成啥,就是常量名称固定的意思)常量名 接受任何表达式作为常量名 4 (常量名)区别大小写 允许不区别大小写(第三个参数传递true
// 1if(condition) const FOO =‘BAR‘;   //未定义    if(condition) defind(‘FOO‘,‘BAR‘); //定义if (!defined(‘FOO‘)) define(‘FOO‘, ‘BAR‘); // 2const BIT_5 = 1 << 5;    // PHP 5.6之后 valid ,之前 invaliddefine(‘BIT_5‘, 1 << 5); // always valid// 3for ($i = 0; $i < 32; ++$i) {    define(‘BIT_‘ . $i, 1 << $i);}// 4define(‘FOO‘,‘BAR‘,true);

const 优点


1. 易读。是一个语言结构,不是一个方法,也可以在类中使用定义常量。
2. 可以在当前命名空间定义常量,但是define()必须传递完整的命名空间名称。
(一个可以是相对的,一个必须是绝对的)

namespace A\B\C;// To define the constant A\B\C\FOO:const FOO = ‘BAR‘;define(‘A\B\C\FOO‘, ‘BAR‘);

3. 定义常量值可以使用数组,const(PHP 5.6 后),defind(PHP 7后)

const FOO = [1, 2, 3];    // valid in PHP 5.6define(‘FOO‘, [1, 2, 3]); // invalid in PHP 5.6, valid in PHP 7.0

4. const 比 defind 快 : const(语言结构)定义于编译时,defind定义于运行时
5. 类中定义常量, const可以,defind不支持

class Foo {    const BAR = 2; // valid}// butclass Baz {    define(‘QUX‘, 2); // invalid}
原创粉丝点击