Php 名称空间常量并用作

Php 名称空间常量并用作,php,namespaces,constants,alias,Php,Namespaces,Constants,Alias,我在使用命名空间中的常量时遇到一些问题。如果我定义常量并尝试使用它,PHP似乎无法找到它。例如,在包含常量的文件中,我的代码如下所示: namespace \my\namespace\for\constants; const DS = DIRECTORY_SEPARATOR; 然后在消费文件中,我有: namespace \some\other\namespace; use \my\namespace\for\constants\DS as DS; echo (realpath (DS

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

namespace \my\namespace\for\constants;

const DS = DIRECTORY_SEPARATOR;
然后在消费文件中,我有:

namespace \some\other\namespace;

use \my\namespace\for\constants\DS as DS;

echo (realpath (DS . 'usr' . DS 'local'));
但是,我没有像预期的那样回显'/usr/local',而是收到了以下通知和一个空字符串

注意:使用未定义的常数DS-假定为“DS”

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

use \my\namespace\for\constants as cns;

echo (realpath (cns\DS . 'usr' . cns\DS 'local'));
我得到了预期的结果,但显然这比直接拉取常数要不方便


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

您应该仔细阅读文档

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

更新。

PHP5.6+还允许使用别名或导入函数和常量 名字


现在您可以导入常量了。

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

namespace my\space;

const CONSTANT_NAME = 123;

function function_name() {
    echo "Test\n";
}

// elsewhere:
use function my\space\function_name;
function_name();

use function my\space\function_name as f;    
f();

use const my\space\CONSTANT_NAME;
echo CONSTANT_NAME . "\n";

use const my\space\CONSTANT_NAME as C;
echo C . "\n";
请注意,为了便于导入,必须使用
const
而不是
define
定义常量:

namespace my\space;

const CONSTANT_NAME = 123;    // this can be imported
define('CONSTANT_NAME', 123); // this sets a global constant
值得注意的是,不可能导入类常量:

namespace my\space;

class Test {
    const CONSTANT_NAME = 123;
}

use const my\space\Test\CONSTANT_NAME;  // undefined constant
use const my\space\Test::CONSTANT_NAME; // syntax error

名称空间和常量是不同的。
use
命令映射名称空间,而不是常量。您可以使用定义宏,但我会考虑坏的风格:它降低了代码的可读性,因为还不清楚“DS”是从哪里来的。
namespace my\space;

class Test {
    const CONSTANT_NAME = 123;
}

use const my\space\Test\CONSTANT_NAME;  // undefined constant
use const my\space\Test::CONSTANT_NAME; // syntax error