В чем разница между использованием глобального экрана $current и get current screen()?


Я смотрел на 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';
    }

}

Считается ли один метод лучше другого? Если да, то почему?

Author: fuxia, 2013-09-07

2 answers

В вашем примере в настоящее время нет никакой разницы. Вы получаете один и тот же объект, если он есть. Попробуйте:

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

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

echo '$current_screen->foo: ' . $current_screen->foo; // 2!

Простая причина: объекты не передаются как копия в PHP.

Но: глобальные переменные действительно плохие, потому что каждый может изменить их в любое время. Однажды далеко-далеко WordPress может отказаться от этой глобальной переменной. Если вы используете оболочку функции для получения объекта, у вас все должно быть в порядке. В противном случае ваш код может вызвать уведомления.

И всегда проверяйте, действительно ли вы получаете объект. $current_screen->post_type может и не существовать.

 5
Author: fuxia, 2013-09-07 15:51:01

Функция get_current_screen фактически использует глобальную переменную $current_screen, но разница в том, что функция get_current_screen выполняет проверку, чтобы увидеть, установлена ли глобальная переменная $current_screen, а затем либо возвращает null (если переменная не установлена), либо $current_screen.

В связи с этим я бы посоветовал вам использовать функцию get_current_screen, чтобы включить эту дополнительную проверку isset.

Смотрите это в исходном коде WordPress (wp-admin/includes/screen.php ) линия 174.

 0
Author: Mestika, 2014-01-14 18:33:48