【发布时间】:2012-03-29 19:07:33
【问题描述】:
我正在尝试制作复杂的模板库。问题是我将自己的语法和 php 保存在同一个文件中。
首先我的语法被解析和重新格式化。输出通常是 html + php 作为字符串。我不想制作缓存文件,而是使用包含“中间”模板的字符串。
在这个模板(包含php标签和html的字符串)上应该执行php操作。
MyComplexTemplate(我的语法 + php) =parse=> 模板(HTML+PHP) =exec php=> 结果(HTML)
对于 2. 我正在尝试将 ob_start() 与 echo 一起使用,但 php 标签内的所有内容都消失了。
例如:
<?php
$asd = "123";
ob_start();
echo "<div><?php echo $asd; ?></div>"; // Middle template
$result = ob_get_contents();
ob_end_clean();
echo $result;
?>
结果应该是“
这只是一个简单的例子。我的模板将在 php 标签中包含所有类型的 php 操作。
这种操作有可能吗?
更新
模板即:(template.php)
.mySyntax (...) and so on
<?php foreach($asd as $data): ?>
<div><?php echo $data ?></div>
<?php endforeach; ?>
.mySyntax
some text
使用 MySyntaxParser 解析模板并在此之后执行 php,保持不变:
<?php
$t = new MySyntaxParser("template.php"); // My parser. Converts mySyntax to html.
$asd = array("test1", "test2");
ob_start();
echo $t->parse(); // Should execute php code inside the string;
$result = ob_get_contents();
ob_end_clean();
echo $result;
?>
更新
我想实现像here 这样的最精确的东西,但 require_once 应该以某种方式来自字符串:
解决方案
其实解决方法就在这个话题PHP: Equivalent of include using eval。 eval 必须与带有 php 标签的 pre 和 postpadded 一起使用。
您还应该查看THIS 博文。
喜欢这里:
<?php
$asd = "123";
ob_start();
eval ('?>
<?php foreach(array("asd", "asx123") as $data): ?>
<div><?php echo $data ?></div>
<?php endforeach; ?>
<?php;');
ob_flush();
?>
【问题讨论】:
-
PHP 标记不嵌套,如果这是您的要求。
-
我无法想象像你那样做的好处。我所知道的是这非常丑陋......
-
这个例子是非正式的。我创建的班级可以看到here。