Php 动态方法名
首先,我为这个标题感到抱歉,但我不知道该如何命名 比如说,我有这样的想法:Php 动态方法名,php,oop,object,Php,Oop,Object,首先,我为这个标题感到抱歉,但我不知道该如何命名 比如说,我有这样的想法: $lang = new lang; $lang->setLanguage('en'); $string = $lang->get('Willkommen'); 例如,这将输出Welcome 但我想要的是: $lang = new lang; $lang->setLanguage->en $string = $lang->get->Willkommen 正如您所想,这也应该输出欢迎
$lang = new lang;
$lang->setLanguage('en');
$string = $lang->get('Willkommen');
例如,这将输出Welcome
但我想要的是:
$lang = new lang;
$lang->setLanguage->en
$string = $lang->get->Willkommen
正如您所想,这也应该输出欢迎
换句话说,我希望得到相同的结果,但不必向实例传递参数
我现在搜索了很长时间,但找不到如何做到这一点。在php中,动态访问是使用
{}
:
$key = 'Willkommen';
$lang->{$key};
听起来你在找那个
对不起,你能再解释一下吗?我将如何在方法中处理此问题?附言:我编辑了我的帖子以使它更清晰。我不明白它是这样的,所以我有可能像
$lang->get->Willkommen
?因为我还有一个“set”方法,它被调用来设置所需的语言。谢谢你的编辑,但我有点困惑。那是什么代码>?我想你误解我了。setLanguage应该设置我想要接收的语言。例如,如果我将其设置为“en”,我希望接收来自“Willkomen”的enflish字符串,即“Welcome”。@Michael根据您刚才告诉我的内容再次编辑。这就是你要找的吗?顺便说一下,像$lang->setLanguage->en
这样设置语言是不可能的。是的,没错^^^谢谢,我会试试的。给我几分钟:)非常感谢。工作完美。:)给那个人一块饼干:使用一种方法是最简单的解决办法。另一个解决方案将更加复杂,据我所知,将导致比它解决的问题更多的问题。不幸的是,我需要这样做。我需要它用于细枝模板系统;)
class lang {
var $language = 'en';
function __get($prop) {
if ($prop == 'Willkommen') {
if ($this->language == 'en') return 'Welcome';
else if ($this->language == 'fr') return 'Bonjour';
}
}
function __set($prop, $val) {
if ($prop == 'language') $this->language = $val;
}
}
$lang = new lang();
echo $lang->Willkommen; // Prints "Welcome"
$lang->language = 'fr';
echo $lang->Willkommen; // Prints "Bonjour"