PHP 正在用 HTML 注释替换 php 语句中的 < & >

PHP is replcing The < & > in a php statement with HTML comments

我目前正在尝试为我正在从事的项目创建一个小型模板引擎,并且我正在使用一个系统,我将 {$tag} 替换为预设标签。所以说我把 {username} 放在我的模板文件中,它会 return 一个字符串,它是用户名。现在我想超越简单的字符串替换字符串。所以使用我输入的相同代码

$tpl->replace('getID', '<?php echo "test"; ?>);

它没有用,所以当我去检查元素时,我看到它 returned <!--? echo "test"; ?-->...

所以现在我只是想弄清楚为什么 return 编辑了注释代码。

这是我的 class 文件:

class template {

    private $tags = [];

    private $template;

    public function getFile($file) {

        if (file_exists($file)) {

            $file = file_get_contents($file);
            return $file;

        } else {

            return false;

        }
    }

        public function __construct($templateFile) {

            $this->template = $this->getFile($templateFile);

            if (!$this->template) {

                return "Error! Can't load the template file $templateFile"; 

            }

        }

        public function set($tag, $value) {

            $this->tags[$tag] = $value;
        }

        private function replaceTags() {

            foreach ($this->tags as $tag => $value) {
                $this->template = str_replace('{'.$tag.'}', $value, $this->template);
            }
        return true;
        }

        public function render() {
            $this->replaceTags();
            print($this->template);
        }

}

我的索引文件是:

require_once 'system/class.template.php';

$tpl = new template('templates/default/main.php');

$tpl->set('username', 'Alexander');
$tpl->set('location', 'Toronto');
$tpl->set('day', 'Today');

$tpl->set('getID', '<?php echo "test"; ?>');

$tpl->render();

我的模板文件是:

<!DOCTYPE html>

<html>

<head></head>

<body>
    {getID}
  <div>
    <span>User Name: {username}</span>
    <span>Location: {location}</span>
    <span>Day: {day}</span>
  </div>
</body>
</html>

您在 php 文件中重新声明 PHP,但没有必要。即你正在尝试打印 <?php 这就是它搞砸的原因。

因此,您可以替换为:

$tpl->set('getID', '<?php echo "test"; ?>');

有了这个

$tpl->set('getID', 'test');

但是,您显然已经知道,您只是想更进一步,方法是在集合中使用 php。所以,作为一个想法,你可以试试这个:

$tpl->set('getID', testfunction());

(你在这里调用 testfunction 顺便定义 'getID'

所以,现在你想写一个小函数来做一些花哨的事情,为了这个例子:

function testfunction(){
  $a = 'hello';
  $b = 'world';
  $c = $a . ' ' . $b;
  return $c;
}

上面应该 return hello world 代替 {getID}

参考您的评论 - 如果您想更进一步并开始使用 return 结果更高级,您可以执行以下操作:

function testfunction(){
  $content = "";
  foreach ($a as $b){
    ob_start();
  ?>
    <span><?php echo $b->something; ?></span>
    <a href="#">Some link</a>
    <div>Some other html</div>
    <?php 
      $content += ob_get_clean();
  }
  return $content
}