【问题标题】:how to call global functions classes from namespace PHP如何从命名空间 PHP 调用全局函数类
【发布时间】:2012-08-22 20:12:02
【问题描述】:

有什么办法可以避免经常使用反斜杠吗?

现在,如果我使用命名空间并在其中调用全局的东西,我必须使用反斜杠:

namespace foo;
$a = new \my\name(); // instantiates "my\name" class
echo \strlen('hi'); // calls function "strlen"
$a = \INI_ALL; // $a is set to the value of constant "INI_ALL"

在那种情况下,命名空间内的代码变得非常丑陋,有什么办法可以避免这种情况???

示例取自该网址:http://www.php.net/manual/en/language.namespaces.faq.php

但我的问题是,如果我需要从命名空间调用一些内置类,我必须在名称前使用反斜杠,我可以避免吗?

【问题讨论】:

标签: php namespaces


【解决方案1】:

全局命名空间中的常量和函数不必在前面加上反斜杠。 PHP 将回退到它自己的全局命名空间。 PHP 手册中有一整章解释了这一点:

在命名空间内,当 PHP 在类名、函数或常量上下文中遇到不合格的名称时,它会以不同的优先级解决这些问题。类名总是解析为当前的命名空间名。 […] 对于函数和常量,如果命名空间函数或常量不存在,PHP 将回退到全局函数或常量。

【讨论】:

  • 是的,例如,我应该如何处理异常或任何其他内置类?像 memcached 等...?如果我在没有反斜杠的情况下调用它,即使是 php 构建的扩展类,它也不起作用。这意味着在代码中有很多反斜杠:(
  • @user1016265 异常既不是函数,也不是常量,而是一个类,手册明确指出类名解析为当前的命名空间名称,因此您必须在您的顶部添加它们或别名脚本。
  • 您确实需要在“native”类前面添加反斜杠,例如\Exception\Memcached,或者您可以选择在文件顶部添加:use \Exception;。然后你可以使用不带反斜杠的new Exception('..');
  • @Gordon PHP 手册完全是废话。您认为哪种解决方案更好,迈克尔建议或手册描述了什么?我的意见迈克尔建议 100% 更好
  • @user1016265 Michael 描述的和我描述的一样,和手册描述的一样。我们都描述了同样的事情,因为我们费心阅读和理解手册。
猜你喜欢
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2012-12-26
  • 2013-11-22
相关资源
最近更新 更多