В чем разница между использованием глобального экрана $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';
}
}
Считается ли один метод лучше другого? Если да, то почему?
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
может и не существовать.
Функция get_current_screen
фактически использует глобальную переменную $current_screen, но разница в том, что функция get_current_screen
выполняет проверку, чтобы увидеть, установлена ли глобальная переменная $current_screen, а затем либо возвращает null
(если переменная не установлена), либо $current_screen.
В связи с этим я бы посоветовал вам использовать функцию get_current_screen
, чтобы включить эту дополнительную проверку isset.
Смотрите это в исходном коде WordPress (wp-admin/includes/screen.php ) линия 174.