think\Template::parseVarFunction PHP Method

parseVarFunction() public method

对模板中使用了函数的变量进行解析 格式 {$varname|function1|function2=arg1,arg2}
public parseVarFunction ( string &$varStr ) : void
$varStr string 变量字符串
return void
    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;
    }