使用全局$CURRENT_SCREEN和GET_CURRENT_SCREEN()有什么不同?

时间:2013-09-07 作者:grappler

我一直在看get_current_screen();. 我看到还有一个全球$current_screen; 我可以用的。

以下是两个示例:

// Using function
function wpse_post_notice() {

    $screen = get_current_screen();

    // Only run in post/page creation and edit screens
    if ( $screen->post_type === \'post\' ) {
        return \'This is a post\';
    }

}

// Using gloabl
function wpse_post_notice() {

    global $current_screen;

    // Only run in post/page creation and edit screens
    if ( $current_screen->post_type === \'post\' ) {
        return \'This is a post\';
    }

}
是否认为一种方法比另一种更好?如果是,为什么?

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

在您的示例中,目前没有区别。如果有相同的对象,则得到相同的对象。试试看:

global $current_screen;
$current_screen->foo = 1;

$screen = get_current_screen();
$screen->foo = 2;

echo \'$current_screen->foo: \' . $current_screen->foo; // 2!
原因很简单:在PHP中,对象不是作为副本传递的。

But: 全局变量非常糟糕,因为每个人都可以随时更改它们。在遥远的某天,WordPress可能会反对这个全局变量。如果您使用函数包装器来获取对象,那么应该可以。否则,您的代码可能会引起注意。

并且总是检查你是否真的得到了一个物体。$current_screen->post_type 可能不存在。

SO网友:Mestika

这个get_current_screen 函数实际上使用全局$current\\u screen变量,但区别在于get_current_screen 执行检查以查看是否设置了全局变量$current\\u屏幕,然后返回null (如果未设置变量)或$current\\u屏幕。

对此,我建议您使用get_current_screen 函数,以便包含此额外的isset检查。

See it in the WordPress sourcecode (wp admin/includes/screen.php)第174行。

结束

相关推荐

$GLOBALS array for WordPress

有WordPress定义的文件吗$GLOBALS? 我只是好奇WordPress使用它的目的和用途。仅此而已!