get_transient (), PHP switch () и операторы сравнения

Я использую переходный процесс WordPress, срок действия которого истекает через час, чтобы сохранить значение, которое является целым числом. Я пытаюсь использовать операторы switch() и multiple 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; 

против

Пример 2:

 $transient = get_transient( foobar ); switch( $transient ) : case( $transient = true ) : // do stuff break; case( $transient = false ) : // do stuff break; endswitch; 

Заранее спасибо.

Solutions Collecting From Web of "get_transient (), PHP switch () и операторы сравнения"

Нужно ли использовать переключатель?

почему бы не что-то вроде этого:

 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 } 

Если переходный период возвращает значение, он не вернет true. Он возвращает значение переходного процесса. Если переходный период не задан, он возвращает bool (false)

если вы используете переключатель, он будет выглядеть так:

$ transient = get_transient (foobar);

 switch( $transient ) : case false: // transient not set break; default: // transient didnt return false break; endswitch; 

Я думаю, что switch для этого немного громоздкий. Также ваш второй пример, безусловно, не способ сделать это.

 $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 .

Оба этих примера неверны для значения, возвращаемого get_transient. get_transient возвращает false, когда переходный период не найден, но что, если переходное значение равно 0, оно также будет оцениваться как false.

Оператор switch PHP всегда выполняет свободное сравнение, поэтому вы не можете получить желаемые результаты в случае, когда значение переходного процесса равно 0. Поэтому лучше не использовать переключатель в этом случае, а вместо этого использовать if.

Хотя пример 1 будет работать, если вы уверены, что ваши временные значения никогда не будут оценены как ложные.