public function parseVarFunction(&$varStr)
{
if (false == strpos($varStr, '|')) {
return;
}
static $_varFunctionList = [];
$_key = md5($varStr);
//如果已经解析过该变量字串,则直接返回变量值
if (isset($_varFunctionList[$_key])) {
$varStr = $_varFunctionList[$_key];
} else {
$varArray = explode('|', $varStr);
// 取得变量名称
$name = array_shift($varArray);
// 对变量使用函数
$length = count($varArray);
// 取得模板禁止使用函数列表
$template_deny_funs = explode(',', $this->config['tpl_deny_func_list']);
for ($i = 0; $i < $length; $i++) {
$args = explode('=', $varArray[$i], 2);
// 模板函数过滤
$fun = trim($args[0]);
switch ($fun) {
case 'default':
// 特殊模板函数
if (false === strpos($name, '(')) {
$name = '(isset(' . $name . ') && (' . $name . ' !== \'\')?' . $name . ':' . $args[1] . ')';
} else {
$name = '(' . $name . ' !== \'\'?' . $name . ':' . $args[1] . ')';
}
break;
default:
// 通用模板函数
if (!in_array($fun, $template_deny_funs)) {
if (isset($args[1])) {
if (strstr($args[1], '###')) {
$args[1] = str_replace('###', $name, $args[1]);
$name = "{$fun}({$args['1']})";
} else {
$name = "{$fun}({$name},{$args['1']})";
}
} else {
if (!empty($args[0])) {
$name = "{$fun}({$name})";
}
}
}
}
}
$_varFunctionList[$_key] = $name;
$varStr = $name;
}
return;
}