模板中最常见的是把头部,尾部分割开来,然后各个模板文件去用包含代码把他们引入进来,作为公共模板。那如何header.htm中又包含了a.htm 而a.htm又包含了b.htm呢?这种情况虽然非常少见,但学习下终归是好的,哈哈!
<?phpfunction get_tpl($matches) { echo $incFile = 'templates/' . $matches[1] . '.htm'; echo '<br>'; if (!file_exists($incFile)) { //如果文件不存在,返回false,匹配的部分直接忽略(变为空) return false; } echo '<hr color=red>'; $repIncFile = preg_replace_callback('/{get-(w+)}/', 'get_tpl', file_get_contents($incFile)); //检查被包含的文件是否又包含了另一个文件,有则先替换好(递归函数,不断查找,直到找不到,才不会去执行 get_tpl 停止递归) echo $repIncFile;//查看每次替换后的内容 echo '<hr>'; return $repIncFile;//返回最终替换内容} $content = file_get_contents('templates/tpl.html'); $result = preg_replace_callback('/{get-(w+)}/', 'get_tpl', $content);echo $result;
{get-(w+)}可以匹配 {get-header} {get-a} {get-b} 根据引入的文件名再去查询里面是否有包含代码,有则替换,不断重复该操作,直到没有包含代码,则不再去递归函数。