我有一个像这样的静态类。
<?php
class Language
{
public static $language = array();
var $config;
function __construct($config)
{
switch(strtoupper($config['LANGUAGE']))
{
case 'ENGLISH':
self::setEnglish();
break;
case 'TURKISH':
self::setTurkish();
break;
default:
self::setEnglish();
}
}
public static function setEnglish()
{
self::$language = array(
'CHAIN_VALIDATOR_INITIALIZED' => 'ChainValidator initialized!',
'ERROR_FUNCTION_RETURNED_FALSE' => 'A function returned false.',
);
}
public static function setTurkish()
{
self::$language = array(
'CHAIN_VALIDATOR_INITIALIZED' => 'ChainValidator çalışıyor!',
'ERROR_FUNCTION_RETURNED_FALSE' => 'Bir fonksiyon false döndürdü.',
);
}
public static function getLanguage($key)
{
return isset(self::$language[$key]) ? self::$language[$key] : $key;
}
}
?>
它正在被这样使用,
Language::getLanguage('CHAIN_VALIDATOR_INITIALIZED')
但我必须传递更多参数。与此类似,
Language::getLanguage('CHAIN_VALIDATOR_INITIALIZED', array(__FUNCTION__))
这些参数应按顺序传递,例如%s。最终的外观应如下所示:
"A function returned false" to;
"%s function returned false"
And output would be;
"myLovelyFunction() returned false" (the first array parameter, which is __FUNCTION__)
听起来像我的大脑停止了一块蛋糕。
我该怎么做?
答案 0 :(得分:1)
您可以使用call_user_func_array和sprintf,例如
<?php
foo();
function foo() {
$text = format('CHAIN_VALIDATOR_INITIALIZED', array(__FUNCTION__, __LINE__));
echo $text;
}
function format($key, $params) {
$format = '%s@%s: function returned false'; // =getLanguage($key)
array_unshift($params, $format);
return call_user_func_array('sprintf', $params);
}
打印
foo@5: function returned false
答案 1 :(得分:1)
也许我误解了这个问题,但我认为vsprintf正是你想要的。它基本上是一个sprintf,它接受作为数组的参数。
$string = "%s %s blabla";
$params = array('foo', 'bar');
$output = vsprintf($string, $params);
答案 2 :(得分:0)
更改我的getLanguage函数解决了它。如果有人需要,这就是解决方案。
public static function getLanguage($key, $parameters = null)
{
$string = self::$language[$key];
if(is_array($parameters))
{
foreach ($parameters as $k => $v)
{
$string = str_ireplace('%s', $v, $string);
}
}
return $string;
}