7

例を使用するには、それはまたはである必要があります$name == "John Doe"$name === "John Doe"?

等値比較は、ある種の型キャストを行うため、パフォーマンスが低下すると思います。

ps どちらか一方を選択した場合のパフォーマンスの向上は、たとえあったとしてもごくわずかであることはわかっています。原則の問題です。

4

5 に答える 5

3

厳密に型指定された言語を使用していないという事実を慎重に受け入れるのであれば、ほとんどのコードで === をチェックする必要は実際にはありませんが、PHP コードを作成するときは常にそう考える必要があります。

私は通常 == を使用し、=== は PHP マニュアルが示唆するもの (つまり、strpos() 呼び出しなど) に留保します。

これが私が実行したいくつかの経験的なベンチマークです。多分私は===に切り替える必要があります;-)

$start = microtime(true);

for($i = 0; $i < 1000000; $i++) {
    if("1" === 1); 
}

$end = microtime(true);

echo number_format($end - $start,5,',','.') . " seconds";

// 0,06117 seconds for "thestring" === "thestring"
// 0,07601 seconds for "thestring" == "thestring"

// 0,05154 seconds for "1" === 1
// 0,09041 seconds for "1" == 1
于 2013-01-22T16:40:36.513 に答える
1

私は常に最も厳密に機能するものを選択します。将来の変更時に、他の方法では検出されない論理エラーを防ぐことができるという前提で。私はまだその手順について気分が悪いことはありません。

于 2013-01-22T16:41:42.180 に答える
0

必要次第だと思います。

$s = '0';
echo $s == '' ? 1 : 0;  // false

$s = 0;
echo $s == '' ? 1 : 0;  // true
echo $s === '' ? 1 : 0; // false
echo $s == false ? 1 : 0;  // true
echo $s === false ? 1 : 0; // false

しかし、あなたの場合、これらの行のcosがすべて同じであるかどうかは問題ではないと思います。

$name = 'John Doe';
echo $name == 'John Doe' ? 1 : 0;  // true
echo $name === 'John Doe' ? 1 : 0; // true
于 2013-01-22T17:39:25.580 に答える
0

いずれかに対して値をチェックしていない限り

  • 数値全体 (文字列または数値)
  • ブール値に直接評価されるものすべて

等値演算子自体を使用しても問題ありません。ただし、これらすべての可能性に煩わされたくない場合は、厳密な等値演算子を使用する方が適切なオプションになると思います。

$check = array(
    array(
        'check' => array('01234','1234',01234,1234),
        'against' => array('01234',1234,01234)
    ),
    array(
        'check' => array(0,'0',FALSE,NULL,'',array()),
        'against' => array(FALSE,'')
    ),
    array(
        'check' => array(1,'1',TRUE,'ab',array('a')),
        'against' => array(TRUE,1,'ab')
    )
);

function var2Str($var) {
    if (is_string($var)) return "'$var'";
    elseif (is_bool($var)) return $var ? 'TRUE' : 'FALSE';
    elseif (is_null($var)) return 'NULL';
    elseif (is_array($var)) return 'array('.implode(',',$var).')';
    return $var;
}

foreach ($check as $arr) {
    foreach ($arr['check'] as $ch) {
        $chStr = var2Str($ch);
        foreach ($arr['against'] as $ag) {
            $e1 = $ch == $ag ? 'true' : 'false';
            $e2 = $ch === $ag ? 'true' : 'false';
            echo "$chStr\t==\t" . var2Str($ag) . "\t--> <b>$e1</b>" . PHP_EOL;
            echo "$chStr\t===\t" . var2Str($ag) . "\t--> <b>$e2</b>" . PHP_EOL;
        }
        echo PHP_EOL;
    }
}

出力の 2 番目のブロックの最初の 2 行を確認します。

'1234' == '01234' -->
'1234' === '01234' -->

于 2013-01-22T19:24:37.390 に答える
0

===type等しいかどうかもチェックします。比較演算子のマニュアルはこちらです。

コメントで述べたように、私は自分の答えを編集しました。

==比較される値のタイプがわからない場合に使用されます。数字付きの文字列 --if($str == $num)ここで、$str = '5' および $num = 5 です。それらの型も比較したい (厳密) 場合は、 を使用します===。何年にもわたっ===て、プログラマーとしてほとんどの場合、比較する型を知っているため、使用する方が優れていることを学びました。厳密なプログラミングの実践は、長期的には常に優れています(より効率的でエラーが少ない)。

于 2013-01-22T16:39:24.437 に答える