正如标题所述,我真的很想澄清这一点。我已经阅读了一些关于这个主题的文章和帖子,但有些东西对我来说并不合适。我会补充一点,我对 PHP 有点陌生。好的,这就是我想了解的内容;
namespace Information;
define('ROOT_URL', 'information/');
define('OFFERS_URL', ROOT_URL . 'offers/');
namespace Products;
define('ROOT_URL', 'products/');
define('OFFERS_URL', ROOT_URL . 'offers/');
我希望常量是可构造的,即从基本常量构建常量,这就是我使用define('NAME', value);的原因。
我的问题是,ROOT_URL 的值会产生相对于其命名空间的值吗?像这样;
$info_offers_url = \Information\OFFERS_URL; ('information/offers/')
$prod_offers_url = \Products\OFFERS_URL; ('products/offers/')
或者定义();将 ROOT_URL 放在全局范围内,因此我不应该这样做吗?有更好的做法吗?
非常感谢所有帮助。
最佳答案
如果你想在命名空间中定义一个常量,你需要在你对define()的调用中指定命名空间,即使你是从一个命名空间中调用define()。下面我试过的例子会很清楚。
以下代码将在全局命名空间(即“\CONSTANTA”)中定义常量“CONSTANTA”。
<?php
namespace mynamespace;
define('CONSTANTA', 'Hello A!');
?>
如果你想为命名空间定义常量,你可以像这样定义
<?php
namespace test;
define('test\HELLO', 'Hello world!');
define(__NAMESPACE__ . '\GOODBYE', 'Goodbye cruel world!');
?>
否则,您可以使用 const
在当前命名空间中定义一个常量:
<?php
namespace NS;
define('C', "I am a constant");
const A = "I am a letter";
echo __NAMESPACE__, , PHP_EOL; // NS
echo namespace\A, PHP_EOL; // I am a letter
echo namespace\C, PHP_EOL; // PHP Fatal error: Uncaught Error: Undefined constant 'NS\C'
取自 Manual
关于Php define() 命名空间内的常量说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18247726/