命名空间常量并使用为



我在使用命名空间中的常量时遇到了一些问题。 如果我定义常量并尝试使用它,PHP 似乎找不到它。 例如,在带有常量的文件中,我的代码如下:

namespace mynamespaceforconstants;
const DS = DIRECTORY_SEPARATOR;

然后在消费文件中,我有:

namespace someothernamespace;
use mynamespaceforconstantsDS as DS;
echo (realpath (DS . 'usr' . DS 'local'));

但是,我没有像预期的那样回显"/usr/local",而是收到以下通知和一个空字符串。

注意:使用未定义的常量 DS - 假定为"DS"

如果我按如下方式更改代码:

use mynamespaceforconstants as cns;
echo (realpath (cnsDS . 'usr' . cnsDS 'local'));

我得到了预期的结果,但这显然比直接拉入常量要方便得多。

您可以在命名空间中为类/接口/特征添加别名,您也不能为常量别名吗? 如果你能做到,那怎么做?

PHP 5.6 中添加了对从命名空间导入函数和常量的支持:

namespace myspace;
const CONSTANT_NAME = 123;
function function_name() {
    echo "Testn";
}
// elsewhere:
use function myspacefunction_name;
function_name();
use function myspacefunction_name as f;    
f();
use const myspaceCONSTANT_NAME;
echo CONSTANT_NAME . "n";
use const myspaceCONSTANT_NAME as C;
echo C . "n";

请注意,为了可导入,必须使用 const 而不是 define 来定义常量:

namespace myspace;
const CONSTANT_NAME = 123;    // this can be imported
define('CONSTANT_NAME', 123); // this sets a global constant

值得注意的是,无法导入类常量:

namespace myspace;
class Test {
    const CONSTANT_NAME = 123;
}
use const myspaceTestCONSTANT_NAME;  // undefined constant
use const myspaceTest::CONSTANT_NAME; // syntax error

您应该仔细阅读文档。

PHP 命名空间支持三种类型的别名或导入:别名类名、别名接口名称和别名命名空间名称。请注意,不支持导入函数或常量。

http://php.net/manual/en/language.namespaces.importing.php

// trying to import constant -- not supported
use mynamespaceforconstantsDS as DS; 
// trying to import namespace -- it's works
use mynamespaceforconstants as cns; 

更新。

PHP 5.6+ 还允许别名或导入函数和常量 名字。

现在,您可以导入常量了。

最新更新