diff --git a/compile.php b/compile/result.php similarity index 100% rename from compile.php rename to compile/result.php diff --git a/engine/Engine.php b/engine/Engine.php index b8e4693..3186a1c 100644 --- a/engine/Engine.php +++ b/engine/Engine.php @@ -71,10 +71,9 @@ class Engine /** * 处理模板继承 - * @param $template - * @return mixed + * @param &$template */ - private function parseExtend($template) + private function parseExtend(&$template) { $pattern = '/' . $this->left . 'extend\s+file[\s\S]*?=[\s\S]*?[\'"](.*?)[\'"][\s\S]*?\/' . $this->right . '/is'; preg_match($pattern, $template, $matches); @@ -88,8 +87,7 @@ class Engine $extendFileContent = file_get_contents($file); } // 处理继承中的include标签 - $tempContent = $this->parseInclude($extendFileContent); - $extendFileContent = $tempContent !== false ? $tempContent : $extendFileContent; + $this->parseInclude($extendFileContent); // 被继承模板中的块 preg_match_all($blockPattern, $extendFileContent, $extendResult); // 继承模板中的块 @@ -119,15 +117,13 @@ class Engine } $template = str_replace($searchArray, $replaceArray, $extendFileContent); } - return $template; } /** * 处理include标签 - * @param $template - * @return null|string|string[] + * @param &$template */ - private function parseInclude($template) + private function parseInclude(&$template) { $pattern = '/' . $this->left . 'include\s+file[\s\S]*?=[\s\S]*?[\'"](.*?)[\'"][\s\S]*?\/' . $this->right . '/is'; $template = preg_replace_callback($pattern, function ($result) { @@ -140,9 +136,8 @@ class Engine }, $template); // 处理多层include if ($this->hasInclude($template)) { - $template = $this->parseInclude($template); + $this->parseInclude($template); } - return $template; } /** @@ -159,10 +154,9 @@ class Engine /** * 分析参数以及函数输出 - * @param $template - * @return mixed + * @param &$template */ - private function parseVars($template) + private function parseVars(&$template) { preg_match_all('/{(.*?)}/', $template, $matches); $search = []; @@ -188,8 +182,6 @@ class Engine if (!empty($search) && !empty($replace)) { $template = str_replace($search, $replace, $template); } - - return $template; } /** @@ -303,10 +295,9 @@ class Engine /** * 进行标签处理 - * @param $template - * @return null|string|string[] + * @param &$template */ - private function parseTags($template) + private function parseTags(&$template) { foreach ($this->getTags() as $name => $item) { $pattern = '/' . $this->left . '(?:(' . $name . ')\b(?>[^' . $this->right . ']*)|\/(' . $name . '))'; @@ -382,7 +373,6 @@ class Engine }, $template); } } - return $template; } /** @@ -409,14 +399,13 @@ class Engine /** * 处理original标签 - * @param $template - * @return null|string|string[] + * @param &$template */ - private function parseOriginal($template) + private function parseOriginal(&$template) { - $pattern = '/' . $this->left . 'original' . $this->right . '([\s\S]*?)'; - $pattern .= $this->left . '\/original' . $this->right . '/is'; - return preg_replace_callback($pattern, function ($matches) { + $pattern = '/' . $this->left . 'original' . $this->right . '([\s\S]*?)'; + $pattern .= $this->left . '\/original' . $this->right . '/is'; + $template = preg_replace_callback($pattern, function ($matches) { return str_replace([ $this->left, $this->right, '{', '}' @@ -429,12 +418,11 @@ class Engine /** * 还原original内容 - * @param $template - * @return mixed + * @param &$template */ - private function returnOriginal($template) + private function returnOriginal(&$template) { - return str_replace([ + $template = str_replace([ '', '' ], [ @@ -451,17 +439,17 @@ class Engine public function compile($template) { // 处理original标签 - $template = $this->parseOriginal($template); + $this->parseOriginal($template); // 处理模板继承标签 - $template = $this->parseExtend($template); + $this->parseExtend($template); // 处理include标签 - $template = $this->parseInclude($template); + $this->parseInclude($template); // 处理定义的标签 - $template = $this->parseTags($template); + $this->parseTags($template); // 处理变量以及函数 - $template = $this->parseVars($template); + $this->parseVars($template); // 还原original内容 - $template = $this->returnOriginal($template); + $this->returnOriginal($template); // 清除多余开始结束标签 $template = preg_replace('/\?>([\r|\n|\s]*?)<\?php/is', '', $template); diff --git a/script.php b/main.php similarity index 78% rename from script.php rename to main.php index d71c8b5..2260f99 100644 --- a/script.php +++ b/main.php @@ -10,7 +10,7 @@ $t1 = microtime(true); // 获取模板引擎实例 $config = [ 'ext' => 'html', - 'dir' => './view/', + 'dir' => './templates/', 'left' => '<', 'right' => '>', ]; @@ -18,10 +18,10 @@ $engine = Engine::instance($config); // 加载自定义标签库 $engine->loadTaglib('article', Article::class); // 读取模板内容 -$template = file_get_contents('./view/index.html'); +$template = file_get_contents('./templates/index.html'); // 编译并写入 $content = $engine->compile($template); -file_put_contents('compile.php', $content); +file_put_contents('./compile/result.php', $content); $t2 = microtime(true); diff --git a/view/base.html b/templates/base.html similarity index 100% rename from view/base.html rename to templates/base.html diff --git a/view/footer.html b/templates/footer.html similarity index 100% rename from view/footer.html rename to templates/footer.html diff --git a/view/index.html b/templates/index.html similarity index 100% rename from view/index.html rename to templates/index.html diff --git a/dot/demo.php b/test_dot.php similarity index 100% rename from dot/demo.php rename to test_dot.php