web-dev-qa-db-fra.com

Quelle est la différence entre global $ current_screen et get_current_screen ()?

J'ai regardé get_current_screen(); . J'ai vu qu'il y a aussi un global $current_screen; que je pourrais utiliser.

Voici deux exemples:

// 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';
    }

}

Une méthode est-elle considérée meilleure que l'autre? Si oui, pourquoi?

5
grappler

Dans votre exemple, il n'y a actuellement aucune différence. Vous obtenez le même objet, s’il en existe un. Essayez le:

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

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

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

La raison simple: les objets ne sont pas passés sous forme de copie en PHP.

Mais: les variables globales sont vraiment mauvaises, car tout le monde peut les changer à tout moment. Un jour, très loin, WordPress pourrait rendre obsolète cette variable globale. Si vous utilisez le wrapper de la fonction pour obtenir l'objet, tout va bien. Sinon, votre code pourrait générer des notifications.

Et vérifiez toujours si vous obtenez bien un objet. $current_screen->post_type pourrait ne pas exister.

4
fuxia

La fonction get_current_screen utilise en fait la variable globale $ current_screen, mais la différence est que la fonction get_current_screen vérifie si la variable globale $ current_screen est définie, puis renvoie null (si la variable n'est pas définie) ou $ current_screen.

En ce qui concerne ce sujet, je vous suggère d’utiliser la fonction get_current_screen afin d’inclure ce contrôle isset supplémentaire.

Voir le code source WordPress (wp-admin/includes/screen.php) ligne 174.

0
Mestika