包 | system.i18n |
---|---|
继承 | class CChoiceFormat |
版本 | $Id: CChoiceFormat.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 |
CChoiceFormat是一个助手类,可以根据指定的数值来选择一个合适消息。
可选择的信息如以下格式字符串:
例如:指定的messages为‘n==1#one|n==2#two|n>2#others’, 且数值为2,则会生成两个messages。
对于像 ‘n==1’这种表达式,我们可以直接用‘1’来表示, 所以上面的例子可以像这样‘1#one|2#two|n>2#others’。
如果没有指定任何数值的情况下, 最后一个消息将被返回。
'expr1#message1|expr2#message2|expr3#message3'其中的expression应该是一个有效的PHP表达式,‘n’作为唯一的变量。 例如:‘n==1’ and ‘n%10==2 && n>10’,两个都是合法的表达式。 变量‘n’将采取指定数值。 如果expression计算值为true,相应信息将被返回。
例如:指定的messages为‘n==1#one|n==2#two|n>2#others’, 且数值为2,则会生成两个messages。
对于像 ‘n==1’这种表达式,我们可以直接用‘1’来表示, 所以上面的例子可以像这样‘1#one|2#two|n>2#others’。
如果没有指定任何数值的情况下, 最后一个消息将被返回。
公共方法
方法 | 描述 | 定义在 |
---|---|---|
format() | 根据指定数值格式化消息。 | CChoiceFormat |
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
evaluate() | 根据指定数值来计算一个PHP表达式。 | CChoiceFormat |
方法详细
evaluate()
方法
protected static boolean evaluate(string $expression, mixed $n)
| ||
$expression | string | PHP表达式 |
$n | mixed | 数值 |
{return} | boolean | 返回计算后的结果 |
protected static function evaluate($expression,$n)
{
return @eval("return $expression;");
}
根据指定数值来计算一个PHP表达式。
format()
方法
public static string format(string $messages, mixed $number)
| ||
$messages | string | 可选择的消息如 ‘expr1#message1|expr2#message2|expr3#message3’. 参见CChoiceFormat更多详细。 |
$number | mixed | 数值 |
{return} | string | 返回选择的信息 |
public static function format($messages, $number)
{
$n=preg_match_all('/\s*([^#]*)\s*#([^\|]*)\|/',$messages.'|',$matches);
if($n===0)
return $messages;
for($i=0;$i<$n;++$i)
{
$expression=$matches[1][$i];
$message=$matches[2][$i];
if($expression===(string)(int)$expression)
{
if($expression==$number)
return $message;
}
else if(self::evaluate(str_replace('n','$n',$expression),$number))
return $message;
}
return $message; // return the last choice
}
根据指定数值格式化消息。