2017-09-25 150 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因爲你沒有使用它。