public function parseVar(&$varStr)
{
$varStr = trim($varStr);
if (preg_match_all('/\\$[a-zA-Z_](?>\\w*)(?:[:\\.][0-9a-zA-Z_](?>\\w*))+/', $varStr, $matches, PREG_OFFSET_CAPTURE)) {
static $_varParseList = [];
while ($matches[0]) {
$match = array_pop($matches[0]);
//如果已经解析过该变量字串,则直接返回变量值
if (isset($_varParseList[$match[0]])) {
$parseStr = $_varParseList[$match[0]];
} else {
if (strpos($match[0], '.')) {
$vars = explode('.', $match[0]);
$first = array_shift($vars);
if ('$Think' == $first) {
// 所有以Think.打头的以特殊变量对待 无需模板赋值就可以输出
$parseStr = $this->parseThinkVar($vars);
} elseif ('$Request' == $first) {
// 获取Request请求对象参数
$method = array_shift($vars);
if (!empty($vars)) {
$params = implode('.', $vars);
if ('true' != $params) {
$params = '\'' . $params . '\'';
}
} else {
$params = '';
}
$parseStr = '\\think\\Request::instance()->' . $method . '(' . $params . ')';
} else {
switch ($this->config['tpl_var_identify']) {
case 'array':
// 识别为数组
$parseStr = $first . '[\'' . implode('\'][\'', $vars) . '\']';
break;
case 'obj':
// 识别为对象
$parseStr = $first . '->' . implode('->', $vars);
break;
default:
// 自动判断数组或对象
$parseStr = '(is_array(' . $first . ')?' . $first . '[\'' . implode('\'][\'', $vars) . '\']:' . $first . '->' . implode('->', $vars) . ')';
}
}
} else {
$parseStr = str_replace(':', '->', $match[0]);
}
$_varParseList[$match[0]] = $parseStr;
}
$varStr = substr_replace($varStr, $parseStr, $match[1], strlen($match[0]));
}
unset($matches);
}
return;
}