这个函数很古怪,没有别的地方调用,应该是获得为定义变量的值
该函数以$varname,名称未键的方式,返回一系列未处理变量名称(即一个含$a[$name]=$name的序列).
function get_undefined($varname) {
if ($this->debug & 4) {
echo "<p><b>get_undefined:</b> varname = $varname</p>\n";
} www.shengfang.org
if (!$this->loadfile($varname)) { 载入文件
$this->halt("get_undefined: unable to load $varname.");
return false;
}
preg_match_all -- 进行全局正则表达式匹配
preg_match_all("/{ ([^ \t\r\n }]+) }/", $this->get_var($varname), $m);
$m = $m[1];
if (!is_array($m)) {
return false; www.shengfang.org
}
reset($m);
while(list($k, $v) = each($m)) {
if (!isset($this->varkeys[$v])) {
if ($this->debug & 4) {
echo "<p><b>get_undefined:</b> undefined: $v</p>\n";
}
$result[$v] = $v;
}
}
if (count($result)) {
return $result;
} else {
return false;
}
}
function finish($str) { 最后处理替换后的数据
switch ($this->unknowns) {
case "keep":
break;
case "remove": 如果是移除,把{××}置空
$str = preg_replace('/{ [^ \t\r\n }]+ }/', "", $str);
break;
case "comment": 替换为注释
$str = preg_replace('/{ ([^ \t\r\n }]+) }/', "<!-- Template variable \\1 undefined -->", $str);
break;
}
return $str; www.shengfang.org
}
function p($varname) { 打印
print $this->finish($this->get_var($varname));
}
www.shengfang.org
function get($varname) { 取最终数据
return $this->finish($this->get_var($varname));
}
www.shengfang.org
function filename($filename) { 文件名处理
if ($this->debug & 4) {
echo "<p><b>filename:</b> filename = $filename</p>\n";
}
if (substr($filename, 0, 1) != "/") { 如果是单个文件名,加上目录
$filename = $this->root."/".$filename;
}
if (!file_exists($filename)) {
$this->halt("文件: $filename 不存在。有可能您的安装没有成功。");
}
return $filename;
}
function varname($varname) {
return preg_quote("{ ".$varname." }"); preg_quote -- 转义正则表达式字符
}
function loadfile($varname) { 载入文件
if ($this->debug & 4) {
echo "<p><b>loadfile:</b> varname = $varname</p>\n";
}
if (!isset($this->file[$varname])) { 如果FILE数组没有对应该KEY的VAR
// $varname does not reference a file so return
if ($this->debug & 4) {
echo "<p><b>loadfile:</b> varname $varname does not reference a file</p>\n";
}
return true;
}
if (isset($this->varvals[$varname])) {
// will only be unset if varname was created with set_file and has never been loaded
// $varname has already been loaded so return
if ($this->debug & 4) {
echo "<p><b>loadfile:</b> varname $varname is already loaded</p>\n";
}
return true;
}
$filename = $this->file[$varname]; 取得实际文件名
/* use at file here to avoid leaking filesystem information if there is an error */
file -- 把整个文件读入一个数组中
implode--把一个数组里面的数据组合成为一个字符串
$str = implode("", @file($filename));
if (empty($str)) {
$this->halt("loadfile: While loading $varname, $filename does not exist or is empty dot ");
return false; www.shengfang.org
}
if ($this->debug & 4) {
printf("<b>loadfile:</b> loaded $filename into $varname<br>\n");
}
$this->set_var($varname, $str); 把这个文件赋值给文件名KEY
return true; www.shengfang.org
}
function halt($msg) {
$this->last_error = $msg;
if ($this->halt_on_error != "no") { 根据定义是否继续执行
$this->haltmsg($msg);
}
if ($this->halt_on_error == "yes") {
die("<b>程序意外终止。</b>"); 等效于EXIT
}
return fal www.shengfang.org se;
}
function haltmsg($msg) {
printf("<b>模板错误:</b> %s<br>\n", $msg);
}
} www.shengfang.org
?>