是否有模仿“”行为的php函数?

时间:2012-04-16 19:43:00

标签: php zend-framework

我正在尝试在Zend Framework中创建一个表视图助手,它需要一组模型并生成一个显示模型属性的html表。

用户可以添加额外的列来显示更新,删除模型等操作。

因此用户可以添加类似

的字符串
  $columnContent =   '<a href=\'update/$item[id]\'>update</a>' ; 

请注意,我使用简单的引号来缓存稍后要评估的字符串

我的问题是,有没有办法在以后的上下文中评估该字符串?

所以我需要模仿Php中字符串的行为,谢谢。

类似的东西:

//在上下文中,$ item是一组模型的行:

$myVar = evaluatemyString($columnContent);

编辑:

我不是在寻找在我的情况下无效的eval函数,(我认为)。

编辑2:

我也需要把结果放在一个变量中。

3 个答案:

答案 0 :(得分:0)

PHP中的eval函数

eval($columnContent);

答案 1 :(得分:0)

使用&#34;模板&#34; (引用是有意的)代替。请查看intl,尤其是messageformatter。还有好的旧printf() - 函数(包含sprintf()等等)

答案 2 :(得分:0)

这是一个简单的UTF-8安全字符串插值示例。正则表达式使用以下规则强制变量:

  1. 以@
  2. 为前缀
  3. object:属性表示法(表示关联数组键“object”,其值也是关联数组)
  4. 换句话说,而不是像$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;