如何在 PHP 中引用变量类的静态方法?

发布于 2024-08-24 18:18:21 字数 234 浏览 3 评论 0原文

我正在编写一个工厂类,它应该能够返回多种不同类型的单例实例,具体取决于给定的参数。该方法看起来像这样,但我引用单例静态方法的方式显然是错误的:

public function getService($singletonClassName) {
    return $singletonClassName::getInstance();
}

这种引用的正确语法在 PHP 中是什么样子?

I'm writing a factory class that should be able to return singleton instances of a number of different types, depending on the given parameter. The method would look something like this, but the way I'm referencing the singleton's static method is obviously wrong:

public function getService($singletonClassName) {
    return $singletonClassName::getInstance();
}

What would the correct syntax for such a reference look like in PHP?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

罪歌 2024-08-31 18:18:21

你不能在 PHP < 中使用这种语法。 5.3 :它是 PHP 5.3 的新功能之一

,对于 PHP 5.2,有几种可能性是:

  • 使用类的名称(如果您知道的话)
  • 或者使用类似 call_user_func

In the first case, it would be as simple as :

ClassName::getInstance()

并且,在第二个中,您将使用类似以下内容的内容:

call_user_func($singletonClassName .'::getInstance');

根据 call_user_func,这应该适用于 PHP >= 5.2.3

或者你可以只使用:

call_user_func(array($singletonClassName, 'getInstance'));

You cannot use that kind of syntax with PHP < 5.3 : it's one of the new features of PHP 5.3

A couple of possibilities, with PHP 5.2, would be to :

  • use the name of the class, if you know it
  • Or use something like call_user_func

In the first case, it would be as simple as :

ClassName::getInstance()

And, in the second, you'd use something like :

call_user_func($singletonClassName .'::getInstance');

According to the documentation of call_user_func, this should work with PHP >= 5.2.3

Or you could just use :

call_user_func(array($singletonClassName, 'getInstance'));
与往事干杯 2024-08-31 18:18:21

您只需使用类名

public function getService($singletonClassName) {
    return SingletonClassName::getInstance();
}

或者,如果 $singleClassName 是包含类名的变量,则使用

public function getService($singletonClassName) {
    return call_user_func( array($singletonClassName, 'getInstance') );
}

从 5.2.3 开始,您也可以这样做

call_user_func($singletonClassName .'::getInstance'); // As of 5.2.3

You just use the class name

public function getService($singletonClassName) {
    return SingletonClassName::getInstance();
}

Alternatively, if $singleClassName is a variable containing the classname use

public function getService($singletonClassName) {
    return call_user_func( array($singletonClassName, 'getInstance') );
}

As of 5.2.3 you can also do

call_user_func($singletonClassName .'::getInstance'); // As of 5.2.3
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文