【问题标题】:PHP Namespaces, including a constant in a use statement [duplicate]PHP命名空间,包括use语句中的常量[重复]
【发布时间】:2018-08-02 11:48:39
【问题描述】:

我正在尝试在 PHP 命名空间使用语句中使用常量:

define('API_VERSION', 'v201705');

我希望能够在下面的 use 语句中使用上面的常量

use api\v201705\service;

我不知道这是否可行,因为以下显然不起作用:

use api\.API_VERSION.\service;

谁能建议在这种情况下使用常量的不同方法?

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 你试过 $path = 'api\' 吗? API_VERSION 。 '\服务';使用$路径;或使用 {'sdfsdf' 。持续的 。 'sdfsdfsdf'}
  • PHP 命名空间在编译时进行评估。常量在运行时定义和使用(在编译步骤之后并且仅在编译成功时发生)。它不能如你所愿。
  • @Andrew 阅读了我之前的评论。
  • 如果不能使用常量,也许可以使用静态变量?

标签: php namespaces constants


【解决方案1】:

我在这里使用的解决方法是仅使用类常量。

然后

  1. 您无需覆盖自动加载器
  2. 您可以对常量进行语义分组
  3. “define”具有全局可见性,在 99% 的用例中您不需要它。
  4. 您无需实例化类即可使用类常量。因此,这是相当便宜的操作。

namespace My;

class StaticConfig {  
   const VERSION = '1.2.3';
}

...        
use My\StaticConfig;
echo StaticConfig::VERSION;

实际上,这甚至不是一种解决方法,而是很常见的做法。

【讨论】:

  • 实际上,恕我直言,您的问题不是重复的,因为您在谈论常量,而不是变量。
  • 非常感谢 Alex,您回答的唯一问题是我无法使用 My\StaticConfig::VERSION;在 use 语句中,如下所示: use My\StaticConfig::VERSION;再次感谢。
  • 是什么阻止了您使用“使用 My\StaticConfig”,然后在需要时只使用 StaticConfig::VERSION 的值?
  • 我已经更新了示例。这可能更容易理解。
  • 非常感谢 Alex,但我对 PHP 的理解不足以让您的示例正常工作。再次感谢您的帮助,我现有的工作,它并不理想,但我会坚持下去。
猜你喜欢
  • 1970-01-01
  • 2010-10-27
  • 2017-01-07
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2014-11-28
相关资源
最近更新 更多