Gor*_*onM 5 php alias namespaces constants
我在使用命名空间中的常量方面遇到了一些问题.如果我定义常量并尝试使用它,PHP似乎无法找到它.例如,在我的常量文件中,我的代码如下:
namespace \my\namespace\for\constants;
const DS = DIRECTORY_SEPARATOR;
Run Code Online (Sandbox Code Playgroud)
然后在消费文件中我有:
namespace \some\other\namespace;
use \my\namespace\for\constants\DS as DS;
echo (realpath (DS . 'usr' . DS 'local'));
Run Code Online (Sandbox Code Playgroud)
但是,不是按预期回显'/ usr/local',而是获得以下通知和空字符串.
注意:使用未定义的常量DS - 假设为'DS'
如果我更改代码如下:
use \my\namespace\for\constants as cns;
echo (realpath (cns\DS . 'usr' . cns\DS 'local'));
Run Code Online (Sandbox Code Playgroud)
我得到了预期的结果,但它显然比仅仅能够直接拉出常数更不方便.
您可以在命名空间中为别名/接口/特征添加别名,您是否也不能为常量设置别名?如果你能做到,那怎么样?
你应该仔细阅读文档.
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;
Run Code Online (Sandbox Code Playgroud)
UPDATE.
PHP 5.6+还允许别名或导入函数和常量名称.
现在您可以导入常量.
小智 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";
Run Code Online (Sandbox Code Playgroud)
请注意,为了可导入,必须使用const而不是define:来定义常量:
namespace my\space;
const CONSTANT_NAME = 123; // this can be imported
define('CONSTANT_NAME', 123); // this sets a global constant
Run Code Online (Sandbox Code Playgroud)
这是值得一提,这是没有可能的导入类的常量:
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
Run Code Online (Sandbox Code Playgroud)