2017-09-25 132 views
0

努力了解关闭几天。任何人都可以指引我走向正确的方向吗?需要重新编写这个“create_function”作为lambda。从create_function升级到关闭

$section = preg_replace_callback('/{listing_field_([^{}]*?)_caption}/', create_function('$matches', 'global $config,$or_replace_listing_id,$lang;require_once($config[\'basepath\'].\'/include/listing.inc.php\'); return listing_pages::renderSingleListingItem($or_replace_listing_id, $matches[1],\'caption\');'), $section); 

回答

1

你定义一个闭合像这样:

$myClosure = function ($args) { 
    // do something; 
}; 

create_function需要两个参数 - 第一个是的可调用的参数的eval'd字符串,第二个是要执行的代码 - 所以你” ð做这样的事情:

$section = preg_replace_callback(
    // Your regex search pattern 
    '/{listing_field_([^{}]*?)_caption}/', 
    // Your callback 
    function ($matches) use ($config, $or_replace_listing_id) { 
     require_once $config['basepath'] . '/include/listing.inc.php'; 
     return listing_pages::renderSingleListingItem(
      $or_replace_listing_id, 
      $matches[1], 
      'caption' 
     ); 
    }, 
    // Your subject 
    $section 
); 

请注意,我通过use导入到回调,而不是取代你的全局变量调用,并删除$lang因为你没有使用它。