web-dev-qa-db-fra.com

Comment savoir si $ query_var isset?

J'étais fatigué d'utiliser isset($queryvar) mais cela n'a pas fonctionné. J'ai donc implémenté ma propre fonction qv_isset, mais il y a un problème lorsque $ch est défini sur 0.

$cls = get_query_var('cls');
$ch = get_query_var('ch');

function qv_isset($var) {
    if($var == '') { return false; 
    } else { return true; }
}

if(qv_isset($cls) && qv_isset($ch)) {
    mcs_textbook_chapter($dialect, $cls, $ch);
} elseif(qv_isset($cls)) {              
    mcs_textbook_chapter($dialect, $cls);
} else {
    mcs_textbook($dialect);
}
1
Evan Yeung

utilisez l'opérateur de comparaison indentical :

if(get_query_var('cls') !== '' && get_query_var('ch') !== '') {
    mcs_textbook_chapter($dialect, $cls, $ch);
} elseif(get_query_var('cls') !== '') {              
    mcs_textbook_chapter($dialect, $cls);
} else {
    mcs_textbook($dialect);
}
4
onetrickpony

Si vous voulez vraiment savoir si unWordPress Query Varest défini ou non, vous devez le vérifier directement.

Tous les vars de requête définis sont stockés dans un tableau global accessible de la classe WP_Query.

Il a une instance par défaut liée à la variable globale $wp_query. Dans cet esprit, il est possible de créer une fonction qv_isset() qui fonctionne de manière précise:

function qv_isset($var_name) {
    $array = $GLOBALS['wp_query']->query_vars;
    return array_key_exists($var_name, $array);
}

Ce qui rend cela si facile, c'est que array_key_exists () renvoie true ou false.

Normalement, pour tester toute variable PHP si elle est définie ou non, vous pouvez utiliser isset() . Mais il y a une lacune: si une variable est NULL, elle dira qu'elle n'est pas définie - même si c'est le cas. Comparable à ce qui a été écrit à propos de empty () ici aussi, il sera dit de manière comparable pour '' (chaîne vide), NULL, 0 etc.

Quoi qu'il en soit, nous n'avons pas besoin de nous appuyer sur cette fonction pour vérifier si unqueryvara été défini, car nous pouvons utiliser array_key_exists () ici.


Maintenant pour votre code:

function qv_get($var_name, $default = null) {
    return qv_isset($var_name) ? get_query_var($var_name) : $default;
}

mcs_textbook_chapter($dialect, qv_get('cls'), qv_get('ch'));

Ou avec d’autres mots: si votre fonction a déjà (que beaucoup) de paramètres optionnels, voyez comment vous pouvez mieux l’alimenter. Les variables non définies sont NULL (comme indiqué ci-dessus avec isset ()), il est donc utile de les transmettre également comme paramètres facultatifs non définis.

4
hakre

Bonjour @imHavoc:

Je pourrais écrire ce code comme ceci(bien qu'il existe plusieurs façons de l'écrire):

$cls = get_query_var('cls');
$ch =  get_query_var('ch');

if (strlen("{$cls}{$ch}")==0) {
  mcs_textbook($dialect);
} if (strlen($ch)==0) {
  mcs_textbook_chapter($dialect, $cls);
} else {
  mcs_textbook_chapter($dialect, $cls, $ch);
}
3
MikeSchinkel

Vous voudrez utiliser empty , isset a échoué car vous venez de définir la variable. Une valeur vide est toujours une valeur.

if ( empty($cls) && empty($ch) ){
    // Not set
}
2
Backie