Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP创建了一种更好的回送变量的方法_Php_Variables_Replace - Fatal编程技术网

PHP创建了一种更好的回送变量的方法

PHP创建了一种更好的回送变量的方法,php,variables,replace,Php,Variables,Replace,我正在寻找一种方法,用另一种符号代替,比如{$something}。但是:没有使用smarty或类似的东西 更详细的信息: 目前,我得到了一个.php文件(其中包含一些变量),其中包括文件“template.php”。在这个模板文件中,我不想使用(不是非常友好的)php符号,而是像上面提到的那样替换这个文件中的某些字符串。有什么办法吗?如果可以用替换像这样的字符串,这可能是最好的 也许(我的想法)我应该把整个代码写进一个php变量,然后做一些预替换和回显?或者有更漂亮的解决方案吗?有一些符号可以

我正在寻找一种方法,用另一种符号代替
,比如
{$something}
。但是:没有使用smarty或类似的东西

更详细的信息: 目前,我得到了一个.php文件(其中包含一些变量),其中包括文件“template.php”。在这个模板文件中,我不想使用(不是非常友好的)php符号,而是像上面提到的那样替换这个文件中的某些字符串。有什么办法吗?如果可以用
替换像
这样的字符串,这可能是最好的


也许(我的想法)我应该把整个代码写进一个php变量,然后做一些预替换和回显?或者有更漂亮的解决方案吗?

有一些符号可以尝试。我更喜欢的模板是:

<?php

echo <<<HTML
<html>
    <head>
        <title>$title</title>
    </head>
    <body>
        $body
    </body>
</html>
HTML;

?>

然后在内容文件中,执行以下操作:

<?php
$title = 'My Page!';
$body = '<p>My Content!</p>';
include './template.php';
?>

有了这个,你不必逃避单引号和双引号,而且很容易在以后进行更改


您还可以像您所说的那样,将文件中的内容读入字符串并使用preg_replace。最简单的方法是使用数组手动遍历文件并拉出占位符。但是如果你有高流量和很多变量,这是一个缓慢的解决方案。

几年前做了一件类似的事情,我不得不替换电子邮件模板中的几个变量。我最终实现的是在几个标记上执行
str\u replace
。和您一样,我也不希望在模板文件中使用PHP符号或转义字符

例如:

template.php

<html>
    <head>
        <title>[EMAIL_TITLE]</title>
    </head>
    <body>
        Hello [USER_NAME],

        Login here [LOGIN_LINK].
    </body>
</html>
<html>
    <head>
        <title><?= $params['title']; ?></title>
    </head>
    <body>
        Hello <?= $params['userName']; ?>!
    </body>
</html>
不过,我已经更改了实现,以使用PHP短标记。使用前面相同的示例,您可以尝试:

template.php

<html>
    <head>
        <title>[EMAIL_TITLE]</title>
    </head>
    <body>
        Hello [USER_NAME],

        Login here [LOGIN_LINK].
    </body>
</html>
<html>
    <head>
        <title><?= $params['title']; ?></title>
    </head>
    <body>
        Hello <?= $params['userName']; ?>!
    </body>
</html>

短标签<代码>。你是preg_替换,echo解决方案基本上是smarty/twig。就我个人而言,我一直不明白为什么php模板需要“用户友好”。短标记并没有真正的帮助-我想为所有新手和编码懒惰的人创建一个模板系统:)但是如果smarty使用类似的解决方案,应该没问题…smarty只是众多模板中的一个engines@MikeB:因为人们在php模板引擎中模板时想要模板。为什么只有一层模板,而只有两层的成本只有4倍?@Pi_isnt_42:PHP是一个模板引擎。一直如此。你只是在已经相当复杂的系统上增加了复杂性。好的,谢谢!事实上,我有4个变量,所以这应该不是问题:)我将尝试这两种解决方案(your和preg_replace),看看什么是最好的/最简单的。因为问题是“PHP创建一种更好的方法来回送变量”和对他问题的解释,这不是答案,因为他试图使用的是一种新的符号,那么就不是PHP,然后答案与模板引擎相关,但这不是答案,或者提问的用户必须重写他的answerFair评论,但我的基本问题是什么是输出模板变量的干净、高效的方法。我同意这甚至可能是乏味的。