【问题标题】:How do I reference a static method of a variable class in PHP?如何在 PHP 中引用变量类的静态方法?
【发布时间】:2011-01-24 18:38:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: php static reference variables methods


    【解决方案1】:

    你不能在 PHP

    使用 PHP 5.2 的几种可能性是:

    • 使用类名,如果你知道的话
    • 或者使用类似call_user_func


    在第一种情况下,它很简单:

    ClassName::getInstance()
    

    而且,在第二个中,你会使用类似的东西:

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

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

    或者你可以使用:

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

    【讨论】:

    • 咳嗽咳嗽 分钟 :)
    • 当我开始写我的答案时,你的还没有现在那么完整^^ *(答案只有第一部分,类名是硬编码的)--我们都编辑了几次^^ *
    • 实际上,我从你那里学到了先拍摄然后添加东西的技巧。注意到你这样做了好几次,发现它非常狡猾:)
    • 我也是从别人那里学来的 ^^ ;;我通常认为一个基本的(但很快) 答案会有所帮助,如果提出问题的人自己搜索更多;;如果他再等一会儿或不理解基本答案,几分钟后会有更好的答案;;;我有时也会为已被接受的答案这样做,只是为了让接受的答案更好,并且可以帮助人们稍后阅读它(例如,通过谷歌来时)
    • 好吧,非常感谢你们俩,无论如何:) 至于我应该将哪个答案标记为已接受,我将不得不掷硬币。
    【解决方案2】:

    你只需使用类名

    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
    

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 2017-04-16
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 2010-10-13
      相关资源
      最近更新 更多