我搜索了很多其他类似的问题/解答,但似乎没有一个能解决这个具体情况:
有一个包含常量的文件:
App/Core/SomeConstants.php
其中包含:
namespace App\Core\SomeConstants;
const MY_CONST = 'myconstvalue';
然后有一个控制器使用这个常量,如下所示:
use const App\Core\SomeConstants\MY_CONST;
something("foo" . MY_CONST);
根据https://www.php.net/manual/en/language.namespaces.importing.php我认为这会起作用,但是当我运行该使用代码时(当然在重新加载自动加载器之后) /清除缓存),我得到
Undefined constant \"App\\Core\\SomeConstants\\MY_CONST\""
。
我什至尝试了像
something("foo" . \App\Core\SomeConstants\MY_CONST);
这样的完整命名空间引用,但仍然一无所获。
同样有趣的是,IDE vscode 没有问题,并且在这两种情况下实际上都显示了正确的提示和内容。
我做错了什么?甚至可以在不将常量包装到类中的情况下完成吗?此行为记录在哪里?谢谢
require
指令。需要加载包含已定义常量的 PHP 文件。
// file1.php
namespace Ns1;
const MYCONST = "some value";
// file2.php
namespace Ns2;
require "path/to/file/containing/myconst.php";
$val = Ns1\MYCONST;