我正在尝试在Zend Framework中创建一个表视图助手,它需要一组模型并生成一个显示模型属性的html表。
用户可以添加额外的列来显示更新,删除模型等操作。
因此用户可以添加类似
的字符串 $columnContent = '<a href=\'update/$item[id]\'>update</a>' ;
请注意,我使用简单的引号来缓存稍后要评估的字符串
我的问题是,有没有办法在以后的上下文中评估该字符串?
所以我需要模仿Php中字符串的行为,谢谢。
类似的东西:
//在上下文中,$ item是一组模型的行:
$myVar = evaluatemyString($columnContent);
编辑:
我不是在寻找在我的情况下无效的eval函数,(我认为)。
编辑2:
我也需要把结果放在一个变量中。
答案 0 :(得分:0)
PHP中的eval函数
eval($columnContent);
答案 1 :(得分:0)
使用&#34;模板&#34; (引用是有意的)代替。请查看intl
,尤其是messageformatter
。还有好的旧printf()
- 函数(包含sprintf()
等等)
答案 2 :(得分:0)
这是一个简单的UTF-8安全字符串插值示例。正则表达式使用以下规则强制变量:
换句话说,而不是像$item[id]
这样的变量
您将拥有以下变量:@user:id
<?php
// <a href="update/@user:name">update</a>
//$template = '<a href="update/@user:name">update</a>';
// <a href="update/500">update</a>
$template = '<a href="update/@user:id">update</a>';
// fixture data
$db[499] = array('user' => array('id' => 499));
$db[500] = array('user' => array('id' => 500));
// select record w/ ID = 500
$context = $db[500];
// string interpolation
$merged = preg_replace_callback('/@(?:(?P<object>[^:]+):)(?P<property>[\w][\w\d]*){1}/iu', function($matches) use($context) {
$object = $matches['object'];
$property = $matches['property'];
return isset($context[$object][$property])
? $context[$object][$property]
: $matches[0];
}, $template);
echo "TEMPLATE: ${template}", PHP_EOL;
echo "MERGED : ${merged}", PHP_EOL;