命名空间常量并用作

时间:2013-11-02 09:35:28

标签: 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 . 'usr' . DS 'local'));

但是,不是按预期回显'/ usr / local'而是获得以下通知和空字符串。

  

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

如果我更改代码如下:

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

echo (realpath (cns\DS . 'usr' . cns\DS 'local'));

我得到了预期的结果,但它显然比仅仅能够直接提取常量要方便得多。

您可以在命名空间中为别名/接口/特性添加别名,您是否也无法为常量设置别名?如果你能做到,那怎么样?

2 个答案:

答案 0 :(得分:7)

您应该仔细阅读文档。

  

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

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

// trying to import constant -- not supported
use \my\namespace\for\constants\DS as DS; 
// trying to import namespace -- it's works
use \my\namespace\for\constants as cns; 

<强>更新

  

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

现在你可以导入常量了。

答案 1 :(得分:5)

在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