从create_function升级到闭包

时间:2017-09-25 07:28:14

标签: php

努力了解关闭几天的情况。任何人都能指出我正确的方向吗?需要重写这个" create_function"作为一个lambda。

$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 个答案:

答案 0 :(得分: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,因为您没有使用它。