首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP中的动态静态方法调用?

PHP中的动态静态方法调用?
EN

Stack Overflow用户
提问于 2010-01-21 19:29:04
回答 6查看 72.6K关注 0票数 66

请在PHP中有经验的人帮助解决以下问题。在我的代码中的某个地方,我调用了一个未实例化的类中的公共静态方法:

代码语言:javascript
复制
$result = myClassName::myFunctionName();

但是,我希望有许多这样的类,并根据用户的语言动态确定正确的类名。换句话说,我有:

代码语言:javascript
复制
$language = 'EN';

..。我需要做一些类似这样的事情:

代码语言:javascript
复制
$result = myClassName_EN::myFunctionName();

我知道我可以将语言作为参数传递给函数,并在一个公共类中处理它,但由于各种原因,我更喜欢不同的解决方案。

这有什么意义吗,任何人?谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-21 19:31:42

使用call_user_func函数:

http://php.net/manual/en/function.call-user-func.php

示例:

代码语言:javascript
复制
call_user_func('myClassName_' . $language . '::myFunctionName');
票数 121
EN

Stack Overflow用户

发布于 2010-01-21 19:53:59

我会在工厂中封装您需要的类的创建。

这样,当您需要更改基本名称或将语言映射到正确类的规则时,您将有一个单一的入口点。

代码语言:javascript
复制
    class YourClassFactory {

        private $_language;
        private $_basename = 'yourclass';

        public YourClassFactory($language) {
            $this->_language = $language;
        }

        public function getYourClass() {
            return $this->_basename . '_' . $this->_language;
        }    
    } 

然后,当你不得不使用它的时候:

代码语言:javascript
复制
$yourClass = $yourClassFactoryInstance->getYourClass();
$yourClass::myFunctionName();
票数 16
EN

Stack Overflow用户

发布于 2010-01-21 19:31:36

虽然我认为你的处理方式是一个非常糟糕的主意,但我想我可能有一个解决方案。

代码语言:javascript
复制
$className = 'myClassName_'.$language;
$result = $className::myFunctionName();

我想这就是你想要的

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2108795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档