gpt4 book ai didi

php - 如何扩展字符串中的变量

转载 作者:行者123 更新时间:2023-12-02 17:42:45 24 4
gpt4 key购买 nike

问题

我想像扩展双引号字符串中的变量一样扩展字符串中的变量。

$string = '<p>It took $replace s</>';
$replace = 40;
expression_i_look_for;

$string应该变成 '<p>It took 40 s</>';

我看到了这样一个明显的解决方案:

$string = str_replace('"', '\"', $string);
eval('$string = "$string";');

但我真的不喜欢它,因为 eval() 是不安全的。还有其他方法吗?

上下文

我正在构建一个简单的模板引擎,这正是我需要它的地方。

示例模板 (view_file.php)

<h1>$title</h1>
<p>$content</p>

模板渲染(简化代码):

$params = array('title' => ...);

function render($view_file, $params)
extract($params)
ob_start();
include($view_file);
$text = ob_get_contents();
ob_end_clean();
expression_i_look_for; // this will expand the variables in the template
return $text;
}

模板中变量的扩展简化了它的语法。没有它,上面的示例模板将是:

<h1><?php echo $title;?></h1>
<p><?php echo $content;?></p>

您认为这种做法好吗?还是我应该换个方向看?

编辑

最后我了解到,由于 PHP 扩展变量的方式很灵活(即使 ${$var}->member[0] 也是有效的),所以没有简单的解决方案。

所以只有两个选择:

  1. 采用现有的成熟模板系统
  2. 坚持一些非常基本的东西,基本上仅限于通过 include 包含 View 文件。 .

最佳答案

我宁愿建议使用一些现有的模板引擎,例如 Smarty,但如果你真的想自己做,你可以使用简单的正则表达式来匹配所有由字母和数字构造的变量,然后替换它们使用正确的变量:

<?php

$text = 'hello $world, what is the $matter? I like $world!';

preg_match_all('/\$([a-zA-Z0-9]+)/',
$text,
$out, PREG_PATTERN_ORDER);

$world = 'World';
$matter = 'matter';

foreach(array_unique($out[1]) as $variable){
$text=str_replace('$'.$variable, $$variable, $text);
}

echo $text;

?>

打印

hello World, what is the matter? I like World!

关于php - 如何扩展字符串中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18619371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com