关于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关键字,对吗?