PHP匿名函数:未定义的变量

mar*_*605 2 php wordpress php-5.3

我有这两个 WordPress 功能:

$wpb_set_post_views = function($postID) {
    $count_key = 'wpb_post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
};

add_action( 'wp_head', function ($post_id) {
    if ( !is_single() ) return;
    if ( empty ( $post_id) ) {
        global $post;
        $post_id = $post->ID;
    }
    $wpb_set_post_views($post_id);
});
Run Code Online (Sandbox Code Playgroud)

但是页面返回Notice: Undefined variable: wpb_set_post_views最后一行。

Zar*_*tra 6

在 PHP 中处理闭包时,您需要确保将任何超出范围的变量放入闭包范围内。这与 JavaScript 不同,在 JavaScript 中,闭包可以访问在 PHP 作用域中声明的变量。

你的匿名函数应该如下

function() use ($variableNeeded) { }
Run Code Online (Sandbox Code Playgroud)

然后,您将可以访问该变量。

重要的是要记住,这是按值传递的场景,因此对该变量的任何更改都不会反映在闭包之外,因此您需要按引用传递进行更改。

function() use (&$variableNeeded) { }
Run Code Online (Sandbox Code Playgroud)

  • 在这个例子中,也许不是,但是如果您需要将值更改反映在闭包之外,则需要通过引用传递。调用闭包与调用任何其他函数相同,因此您将按值传递。 (2认同)