web-dev-qa-db-ja.com

get_transient()、 PHP switch()、および比較演算子

1時間後に期限切れになるWordPressトランジェントを使用して、整数値を格納します。トランジェントが存在するかどうかを評価するためにswitch()と複数のcase()ステートメントを使用しようとしています(つまりtrueまたはfalse)。

これが私の質問です。

  1. 例2では、​​どの比較演算子(======)がこのコンテキストに理想的ですか?
  2. 次の例のどれが適切ですか?
  3. 次の例でも同じ結果になりますか?

例1

$transient = get_transient( 'foobar' );

switch( $transient ) :

    case( true ) :
        // do stuff
    break;

    case( false ) :
        // do stuff
    break;

endswitch;

versus

例2

$transient = get_transient( foobar );

switch( $transient ) :

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

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

endswitch;

前もって感謝します。

2
VicePrez

スイッチを使う必要がありますか?

なぜこんな感じじゃないの?

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
}

Aトランジェントが値を返す場合、trueは返されません。トランジェントの値を返します。トランジェントが設定されていない場合はbool(false)を返します

あなたがスイッチを使っているならば、それはこのようになるでしょう:

$ transient = get_transient(foobar);

switch( $transient ) :

    case false:
        // transient not set
    break;

    default:
        // transient didnt return false
    break;

endswitch;
3
Brady

私はswitchはこれに関して少しかさばると思います。また、あなたの2番目の例は間違いなくそれを行う方法ではありません。

$transient = get_transient( 'foobar' );

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

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

   //code goes here
}

===/!==は値と型で比較するので、あなたのトランジェントが整数の0であってもそれはfalseとは見なされません。

3
Rarst

どちらの例も、get_transientから返される値には不適切です。一時値が見つからない場合はget_transientはfalseを返しますが、一時値が0の場合はfalseと評価されます。

PHP switchステートメントは常にゆるい比較を行うので、一時的な値が0の場合には望ましい結果が得られない可能性があります。そのため、この場合はswitchを使用しないほうが良いです。

あなたの一時的な値がfalseに評価されるものになることは決してないだろうと確信していれば例1はうまくいきますが。

0