0

条件が true か false かをチェックする!=代わりに、いつ使用するかについてのルールまたはガイドラインはありますか?(!condition)

たとえば、何かを返す前に TLS が有効になっているかどうかを確認するページがいくつかあります。

if ($_SERVER['HTTPS'] !== 'on') { exit; }

しかし、次のように書くこともできます。

if (!$_SERVER['HTTPS'] === 'on') { exit; }

一部のステートメントでは、後者を使用するのが最もきれいに思えます。たとえば、次のようになります。

if (!isset($_SESSION)) { session_start(); }

...同等のものよりも短い:

if (isset($_SESSION) == false) { session_start(); }

これらのステートメントを記述するための標準またはガイドラインはありますか?それとも単なる好みですか?

==注:との違いは理解し===ています。コードができるだけ明確で簡潔であることを確認したいだけです。

4

4 に答える 4

3

これをしないでください:

if (!$_SERVER['HTTPS'] === 'on') { exit; }

! === よりも優先順位が高いため、これは次のように評価されます。

if ((!$x) === 'on') { ... }

この場合、!$x は $x をブール値にキャストし、それを反転します。したがって、 $x に何かが含まれている場合、次のようになります。

if (false === 'on') { ... }

そして、これは $x のどの値にも一致しません。

于 2012-07-28T15:18:29.133 に答える
2

私はそれに異議を唱えます

if (!$_SERVER['HTTPS'] === 'on') { exit; }

最初のバリアントよりもわかりにくいため、読みにくくなります。

単純なようなものがあるときはいつでも

if ($var)

また

if (!$var)

あなたがしていることは、渡された値を真実/偽の値に強制することです。したがって、これは次と同じではありません。

if ($var === 'on')

特定の比較に対してテストしています(真実/偽ではありません)。

于 2012-07-28T15:14:51.760 に答える
1

not!演算子はステートメントを反転します。条件では、特定の値が に評価されるかどうかを確認するために使用されfalseます。PHP マニュアルから、次の値は false と評価されます。

  • ブール値FALSE
  • 整数0と浮動小数点数0.0
  • 空の文字列ゼロを含む文字列 ( "0")
  • 空の配列
  • NULLおよび未設定の変数
  • 空のタグから作成された SimpleXML オブジェクト
  • (PHP 4 のみ) 変数がゼロのオブジェクト

このため、変数がfalsyかどうかを確認するときは、 not 演算子を使用する必要があります。

その他の条件については、値を明示的に確認する必要があります。

ちなみにif ($_SERVER['HTTPS'] !== 'on') { exit; }if (!$_SERVER['HTTPS'] === 'on') { exit; }はかなり違います。前者は、$_SERVER['HTTPS']変数に値がないonかどうかをチェックします。一方、後者はの値を反転$_SERVER['HTTPS']して比較し、on等しい場合は true を返します。

したがって、たとえば if$_SERVER['HTTPS']が最初に"off"(ゼロ以外の文字列であるため、true)!$_SERVER['HTTPS']返さfalseれ、 と比較され"on"ます。false"on"が等しくないため、条件ifは実行されません。

関数はissetブール値を返すので、if (!isset($_SESSION)) { session_start(); }これは偽であるかどうかをチェックするため、$_SESSIONまったく問題ありません (偽の場合はステートメントを実行しifます)。

于 2012-07-28T15:21:47.817 に答える
1

まあ、それはあなた次第ですが、私は物事をできるだけ英語に近づけるようにしています.

あなたは言いますか:

If switch is not on then…

また

If not switch is on then…

私は個人的に一番上のものを言いたいので、それに続くコードを書きます。

2 番目のスタイルの場合、物事がブール値 (つまり、true または false) を返す場合、のようなものを使用する必要がない限り、true または false と比較することはありませんstrpos

繰り返しますが、英語について考えてみます。

If not is set variable…

また

If is set variable is false…

個人的にはトップのほうが響きがいいのですが、もちろんどちらも英語では正しくありません。

このロジックは、変数や関数の名前付けにも役立つため、検討する価値があると思います。

于 2012-07-28T15:13:22.340 に答える