CChoiceFormat


system.i18n
继承 class CChoiceFormat
版本 $Id: CChoiceFormat.php 3515 2011-12-28 12:29:24Z mdomba $
源码
CChoiceFormat是一个助手类,可以根据指定的数值来选择一个合适消息。 可选择的信息如以下格式字符串:
'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
}

根据指定数值格式化消息。