关于PHP常量的内容
为了更新旧知识,我正在重新学习PHP。
在我不知道的情况下,除了define()外,还增加了其他常量定义的方法。
PHP的常量定义有两种方法。
使用define()函数的东西
define("FOO", 1);
2. 使用const语法的东西
const FOO = 1;
define()函数和const的区别是什么?
在 PHP5.3 中引入了 const 语法。在此之前的版本中不可用。
并非仅仅是语法糖,似乎有一些区别。
1. 可以作为类常量使用吗? ma?)
class Hoge
{
const FOO = "foo"; // <= OK
define("BAR", "bar"); // <= ERROR!!
}
使用const可以在类内定义常量。
(如果尝试在类内使用define()来定义常量,则会出现错误)
使用const在类内定义的常量被称为类常量,并具有公共访问权限。(换句话说,不能指定访问权限)
如果要从类外引用,可以使用“类名::常量名”。
2. 被命名空间所影响。
以const关键字定义的常量会受到命名空间的影响。
<?php
namespace Lib;
const FOO = "foo";
define("BAR", "bar");
如果我们考虑的话,常数FOO将位于命名空间Lib的子级,而常数BAR将不受命名空间影响并始终为全局变量。(最近的PHP版本是否支持使用命名空间)
<?php
require_once("lib.php");
echo BAR . PHP_EOL; // <= OK
echo \Lib\FOO . PHP_EOL; // <= OK
echo FOO . PHP_EOL; // <= ERROR
3. 在定义时,无法使用表达式。 (2014年4月21日 追加)
根据评论中所指出的,在定义时,可能可以将表达式用作常量的值。
const FOO = 1+2; # <= ERROR
define('FOO1', 1+2); # <= OK
因为我没有找到文档中关于可使用表达式的说明,所以没有意识到这一点。
应该选择哪一个?
如果你使用PHP5.3或更高版本,可以使用const关键字,对吗?