CChoiceFormat

优质
小牛编辑
134浏览
2023-12-01
所有包 | 方法
system.i18n
继承class CChoiceFormat
版本$Id: CChoiceFormat.php 3515 2011-12-28 12:29:24Z mdomba $
源码framework/i18n/CChoiceFormat.php
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)
$expressionstringPHP表达式
$nmixed数值
{return}boolean返回计算后的结果
源码: framework/i18n/CChoiceFormat.php#71 (显示) protectedstaticfunctionevaluate($expression,$n)
{
return@eval("return$expression;");
}

根据指定数值来计算一个PHP表达式。

format() 方法
public static string format(string $messages, mixed $number)
$messagesstring可选择的消息如 ‘expr1#message1|expr2#message2|expr3#message3’. 参见CChoiceFormat更多详细。
$numbermixed数值
{return}string返回选择的信息
源码: framework/i18n/CChoiceFormat.php#45 (显示) publicstaticfunctionformat($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;
}
elseif(self::evaluate(str_replace('n','$n',$expression),$number))
return$message;
}
return$message;//returnthelastchoice
}

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