【问题标题】:How to import static function with namespace in php?如何在php中导入带有命名空间的静态函数?
【发布时间】:2026-01-31 19:55:01
【问题描述】:

在命名空间 1 中声明的 A 类。

namesapce namesapce1;
class A
{
  public static function fun1()
  {
  }

}

我想在 B 类中使用 fun1():

namespace namesapce2;
use ???? as fun1
class B
{
    public static func2()
    {
          fun1();
    }
}

怎么做?

【问题讨论】:

  • 如果你在你的工具链上做 cpp:#define use_static(class, name) function name(){ return class::name(func_get_args()); }

标签: php namespaces php-5.4 php-5.5


【解决方案1】:
namespace namespace2;

use namespace1\A;

class B
{
    public static function func2()
    {
          A::fun1();
    }
}

假设您使用的东西可以自动加载或必要的包含。

【讨论】:

  • 感谢您的回复,但我想写 fun1() 而不是 A::fun1() ?
  • 我认为use 关键字不可能从这样的类中导入特定函数。见here。将其称为 fun1() 而不是 A::fun1() 的原因是什么?
  • 因为我想在我的代码中大量使用它,不需要每次都调用A::fun1()!
  • 如果静态函数需要在一个类中,恐怕你别无选择。您可以从类中删除静态函数,使其成为单独命名空间中某处文件中的典型函数,然后将该文件包含在与命名空间2中的类相同的文件中(即require_once __DIR__.'/namespace1_functions.php';。然后你可以随心所欲地调用它,例如fun1()
  • 我也应该对此进行一些扩展。为此,您需要按照说明执行 require 命令,但是如果函数位于不同的命名空间中并且您希望像在当前命名空间中一样使用它,则需要使用 use 语句来导入该函数。如use function namespace1\fun1;。使用use 语句导入特定函数的能力需要 PHP 5.6+。