web-dev-qa-db-fra.com

get_transient (), PHP switch () et opérateurs de comparaison

En utilisant un transitoire WordPress, qui expire après une heure, pour stocker une valeur qui est un entier. J'essaie d'utiliser les instructions switch() et plusieurs case() pour évaluer si le transitoire existe ou non (c'est-à-dire vrai ou faux).

Voici mes questions:

  1. Quel opérateur de comparaison (=, ==, ===), dans l'exemple 2, est idéal pour ce contexte?
  2. Lequel des exemples suivants est approprié?
  3. Les exemples suivants donneraient-ils le même résultat?

Exemple 1:

$transient = get_transient( 'foobar' );

switch( $transient ) :

    case( true ) :
        // do stuff
    break;

    case( false ) :
        // do stuff
    break;

endswitch;

versus

Exemple 2:

$transient = get_transient( foobar );

switch( $transient ) :

    case( $transient = true ) :
        // do stuff
    break;

    case( $transient = false ) :
        // do stuff
    break;

endswitch;

Merci d'avance.

2
VicePrez

Doit-il utiliser un interrupteur?

pourquoi pas quelque chose comme ça:

if ( false === ( $value = get_transient( 'value' ) ) ) {
     // this code runs when there is no valid transient set
} else {
    // this code runs when there is a valid transient set
}

Si le transitoire retourne une valeur, il ne retournera pas true. Il retourne la valeur du transitoire. Si le transitoire n'est pas défini, il retourne bool (false)

si vous utilisez un commutateur, ce serait comme ceci:

$ transitoire = get_transient (foobar);

switch( $transient ) :

    case false:
        // transient not set
    break;

    default:
        // transient didnt return false
    break;

endswitch;
3
Brady

Je pense que switch est un peu trop volumineux pour cela. De plus, votre deuxième exemple n'est certainement pas une façon de le faire.

$transient = get_transient( 'foobar' );

if( false !== $transient ) { // boolean false or has no value 

    //code goes here
}
else { // any other case

   //code goes here
}

===/!== comparez par valeur et par type, donc même si votre transitoire sera un entier 0, il ne sera pas considéré false.

3
Rarst

Vos deux exemples sont incorrects pour la valeur renvoyée par get_transient. get_transient renvoie false lorsque le transitoire n'est pas trouvé, mais si la valeur du transitoire est 0, il sera également évalué à false.

L'instruction PHP switch effectue toujours la comparaison, alors vous risquez de ne pas obtenir les résultats souhaités dans le cas où la valeur transitoire est 0. Il est donc préférable de ne pas utiliser switch dans ce cas, utilisez plutôt if.

Bien que l'exemple 1 fonctionne si vous êtes certain que vos valeurs transitoires ne seront jamais considérées comme fausses.

0
Hameedullah Khan