get_transient (), PHP switch () y operadores de comparación

2

Estoy usando un transitorio de WordPress, que expira después de una hora, para almacenar un valor que es un número entero. Estoy tratando de usar switch() y varias declaraciones case() para evaluar si el transitorio existe o no (es decir, verdadero o falso).

Aquí están mis preguntas:

  1. ¿Qué operador de comparación ( = , == , === ), en el ejemplo 2, es ideal para este contexto?
  2. ¿Cuál de los siguientes ejemplos es apropiado?
  3. ¿Los siguientes ejemplos darían el mismo resultado?

Ejemplo 1:

$transient = get_transient( 'foobar' );

switch( $transient ) :

    case( true ) :
        // do stuff
    break;

    case( false ) :
        // do stuff
    break;

endswitch;

versus

Ejemplo 2:

$transient = get_transient( foobar );

switch( $transient ) :

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

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

endswitch;

Gracias de antemano.

    
pregunta VicePrez 13.05.2011 - 12:21

3 respuestas

3

¿Tiene que usar un interruptor?

¿Por qué no algo como esto?

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 el transitorio devuelve un valor, no devolverá verdadero. Devuelve el valor del transitorio. Si el transitorio no está configurado, devuelve bool (falso)

si está utilizando un interruptor, sería así:

$ transient = get_transient (foobar);

switch( $transient ) :

    case false:
        // transient not set
    break;

    default:
        // transient didnt return false
    break;

endswitch;
    
respondido por el Brady 13.05.2011 - 12:49
3

Creo que switch es un poco voluminoso para esto. Además, su segundo ejemplo definitivamente no es una forma de hacerlo.

$transient = get_transient( 'foobar' );

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

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

   //code goes here
}

=== / !== se compara por valor y tipo, por lo que incluso si su transitorio será entero 0 , no se considerará false .

    
respondido por el Rarst 13.05.2011 - 13:37
0

Sus dos ejemplos son incorrectos para el valor devuelto por get_transient. get_transient devuelve falso cuando no se encuentra el transitorio, pero si el valor transitorio es 0, también se evaluará como falso.

La declaración de cambio de PHP siempre hace la comparación, por lo que es posible que no obtengas los resultados deseados en caso de que el valor transitorio sea 0. Por lo tanto, es mejor no usar el interruptor en este caso, en lugar de usar si.

Aunque el Ejemplo 1 funcionará si está seguro de que sus valores transitorios nunca serán algo que se evalúe como falso.

    
respondido por el Hameedullah Khan 13.05.2011 - 12:59

Lea otras preguntas en las etiquetas