Php define() 命名空间内的常量说明

标签 php namespaces constants

正如标题所述,我真的很想澄清这一点。我已经阅读了一些关于这个主题的文章和帖子,但有些东西对我来说并不合适。我会补充一点,我对 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/

相关文章:

php - 负时间戳——它在 PHP 中有意义吗?

php - 在 gitlab CI 中构建我的 laravel 应用程序时出现 "could not find driver "异常

php - 是否可以在 MYSQL AND "clause"中使用 IF ELSE

android:将常量值分配给 xml 元素

c++ - 为什么不能使用外部常量定义数组?

javascript - 使用 PHP 将二进制数据转换为 ASCII,有可能吗?

xml - 为什么我们需要 targetNamespace?

c# - 如何从 Visual Studio 中的 using 语句中查找 DLL

Clojure - 如何让库用户选择使用哪种打印功能,以显示数据结构?

constants - 如何发现最低的CGFloat负值?