it-swarm.com.de

get_transient (), PHP switch () und Vergleichsoperatoren

Ich verwende einen WordPress-Transienten, der nach einer Stunde abläuft, um einen Wert zu speichern, der eine Ganzzahl ist. Ich versuche, switch() und mehrere case() -Anweisungen zu verwenden, um zu bewerten, ob der Transient existiert oder nicht (d. H. Wahr oder falsch).

Hier sind meine Fragen:

  1. Welcher Vergleichsoperator (=, ==, ===) in Beispiel 2 ist für diesen Kontext ideal?
  2. Welches der folgenden Beispiele ist angemessen?
  3. Würden die folgenden Beispiele das gleiche Ergebnis liefern?

Beispiel 1:

$transient = get_transient( 'foobar' );

switch( $transient ) :

    case( true ) :
        // do stuff
    break;

    case( false ) :
        // do stuff
    break;

endswitch;

versus

Beispiel 2:

$transient = get_transient( foobar );

switch( $transient ) :

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

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

endswitch;

Danke im Voraus.

2
VicePrez

Muss ein Schalter verwendet werden?

warum nicht so etwas:

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
}

Wenn der Transient a einen Wert zurückgibt, wird er nicht true zurückgeben. Es gibt den Wert des Transienten zurück. Wenn der Transient nicht gesetzt ist, wird bool (false) zurückgegeben.

wenn Sie einen Schalter verwenden, würde dies folgendermaßen aussehen:

$ transient = get_transient (foobar);

switch( $transient ) :

    case false:
        // transient not set
    break;

    default:
        // transient didnt return false
    break;

endswitch;
3
Brady

Ich denke switch ist etwas zu sperrig dafür. Auch Ihr zweites Beispiel ist definitiv kein Weg, dies zu tun.

$transient = get_transient( 'foobar' );

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

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

   //code goes here
}

===/!== wird nach Wert und Typ verglichen, sodass 0 auch dann nicht als false betrachtet wird, wenn es sich um eine Ganzzahl handelt.

3
Rarst

Ihre beiden Beispiele sind für den von get_transient zurückgegebenen Wert falsch. get_transient gibt false zurück, wenn der Transient nicht gefunden wird. Wenn der Transientenwert jedoch 0 ist, wird er ebenfalls als false ausgewertet.

Die switch-Anweisung PHP führt immer den losen Vergleich durch, sodass Sie möglicherweise nicht die gewünschten Ergebnisse erhalten, wenn der Übergangswert 0 ist. Verwenden Sie in diesem Fall also lieber switch nicht, sondern if.

Das Beispiel 1 funktioniert jedoch, wenn Sie sicher sind, dass Ihre Übergangswerte niemals falsch sind.

0