请在PHP中有经验的人帮助解决以下问题。在我的代码中的某个地方,我调用了一个未实例化的类中的公共静态方法:
$result = myClassName::myFunctionName();
但是,我希望有许多这样的类,并根据用户的语言动态确定正确的类名。换句话说,我有:
$language = 'EN';
..。我需要做一些类似这样的事情:
$result = myClassName_EN::myFunctionName();
我知道我可以将语言作为参数传递给函数,并在一个公共类中处理它,但由于各种原因,我更喜欢不同的解决方案。
这有什么意义吗,任何人?谢谢。
发布于 2010-01-21 19:31:42
使用call_user_func函数:
http://php.net/manual/en/function.call-user-func.php
示例:
call_user_func('myClassName_' . $language . '::myFunctionName');
发布于 2010-01-21 19:53:59
我会在工厂中封装您需要的类的创建。
这样,当您需要更改基本名称或将语言映射到正确类的规则时,您将有一个单一的入口点。
class YourClassFactory {
private $_language;
private $_basename = 'yourclass';
public YourClassFactory($language) {
$this->_language = $language;
}
public function getYourClass() {
return $this->_basename . '_' . $this->_language;
}
}
然后,当你不得不使用它的时候:
$yourClass = $yourClassFactoryInstance->getYourClass();
$yourClass::myFunctionName();
发布于 2010-01-21 19:31:36
虽然我认为你的处理方式是一个非常糟糕的主意,但我想我可能有一个解决方案。
$className = 'myClassName_'.$language;
$result = $className::myFunctionName();
我想这就是你想要的
https://stackoverflow.com/questions/2108795
复制相似问题