在PHP中,你可以用两种方式声明常量:
使用define关键字 定义(“FOO”,1); 使用const关键字 const FOO = 1;
这两者之间的主要区别是什么? 什么时候,为什么要使用一种,什么时候使用另一种?
在PHP中,你可以用两种方式声明常量:
使用define关键字 定义(“FOO”,1); 使用const关键字 const FOO = 1;
这两者之间的主要区别是什么? 什么时候,为什么要使用一种,什么时候使用另一种?
当前回答
在PHP 5.3之前,const不能在全局作用域中使用。您只能在类中使用它。当您想要设置一些属于该类的常量选项或设置时,应该使用此选项。或者你可能想要创建某种enum。
Define可以用于相同的目的,但只能在全局作用域中使用。它只能用于影响整个应用程序的全局设置。
良好使用const的一个例子是去掉神奇的数字。看一下PDO的常数。例如,当需要指定获取类型时,可以输入PDO::FETCH_ASSOC。如果不使用const,则最终会键入类似35的值(或FETCH_ASSOC定义的任何值)。这对读者来说毫无意义。
好的define用法的一个例子是指定应用程序的根路径或库的版本号。
其他回答
定义我用于全局常量。
const用于类常量。
不能在类范围内定义,而使用const可以。
同样,使用const,它实际上成为类的成员,而使用define,它将被推入全局作用域。
补充一下尼克的回答。Const可以在类中以以下方式使用:
class Foo {
const BAR = 1;
public function myMethod() {
return self::BAR;
}
}
使用define()不能做到这一点。
在PHP 5.3之前,const不能在全局作用域中使用。您只能在类中使用它。当您想要设置一些属于该类的常量选项或设置时,应该使用此选项。或者你可能想要创建某种enum。
Define可以用于相同的目的,但只能在全局作用域中使用。它只能用于影响整个应用程序的全局设置。
良好使用const的一个例子是去掉神奇的数字。看一下PDO的常数。例如,当需要指定获取类型时,可以输入PDO::FETCH_ASSOC。如果不使用const,则最终会键入类似35的值(或FETCH_ASSOC定义的任何值)。这对读者来说毫无意义。
好的define用法的一个例子是指定应用程序的根路径或库的版本号。
我相信从PHP 5.3开始,你可以在类之外使用const,如下面的第二个例子所示:
http://www.php.net/manual/en/language.constants.syntax.php
<?php
// Works as of PHP 5.3.0
const CONSTANT = 'Hello World';
echo CONSTANT;
?>
这些答案大多是错误的,或者只说了一半。
可以通过使用名称空间来限定常量的范围。 你可以在类定义之外使用“const”关键字。然而,就像在 使用"const"关键字赋值的类必须是 常数表达式。
例如:
const AWESOME = 'Bob'; // Valid
不好的例子:
const AWESOME = whatIsMyName(); // Invalid (Function call)
const WEAKNESS = 4+5+6; // Invalid (Arithmetic)
const FOO = BAR . OF . SOAP; // Invalid (Concatenation)
使用define()创建变量常量,如下所示:
define('AWESOME', whatIsMyName()); // Valid
define('WEAKNESS', 4 + 5 + 6); // Valid
define('FOO', BAR . OF . SOAP); // Valid