我已经设置了一个全局变量$ lang($ lang ='de'),有没有办法我可以得到“ Hallo!”通过使用,我正在使用PHP 7.3:
L::HELLO('Mike');?
我不是在寻找类似的解决方案:
sprintf(constant('L::' . $lang . '_HELLO'), 'Mike');
相反,只能通过致电获得它们:
L::HELLO('Mike');
或:
L::HI;
实际类(如果可以帮助或以设置的语言初始化类,我可以通过var更改const):
<?php class L {
const en_HELLO = 'Hello %s!';
const de_HELLO = 'Hallo %s!';
const fr_HELLO = 'Bonjour %s!';
const it_HELLO = 'Ciao %s!';
const en_HI = 'Hi...';
const de_HI = 'Hi...';
const fr_HI = 'Hi...';
const it_HI = 'Hi...';
public static function __callStatic($string, $args) {
return vsprintf(constant("self::" . $string), $args);
}
}
答案 0 :(得分:4)
我可以通过两种方式查看。首先是最简单的-但我通常也不会推荐它。
这使用global
来访问您已经拥有的变量,并将其作为用于显示常量的键的一部分。
public static function __callStatic($string, $args) {
global $lang;
return vsprintf(constant("self::" .$lang."_" . $string), $args);
}
所以
$lang = "de";
echo L::HELLO('Mike');
给予
Hallo Mike!
第二种方法涉及将语言设置到您的类中,因此这是一个额外的步骤,但是它也更加灵活(IMHO)...
class L {
const en_HELLO = 'Hello %s!';
const de_HELLO = 'Hallo %s!';
const fr_HELLO = 'Bonjour %s!';
const it_HELLO = 'Ciao %s!';
protected static $lang = "en";
public static function setLang ( string $lang ) {
self::$lang = $lang;
}
public static function __callStatic($string, $args) {
return vsprintf(constant("self::" .self::$lang."_" . $string), $args);
}
}
因此,您可以将其用作...
$lang = "de";
L::setLang($lang);
echo L::HELLO('Mike');