3

単純な比較記号>,>=とその逆のコンポーネントは、特定の変数が数値であるかどうかを評価できるようです。例$whatami='beast'; ($whatami<0)?echo 'NaN':echo 'is numeric!';

正の値 (数値 > 0)is_numeric()に使用が必要な場合はありますか? 上記の比較記号を使用すると、変数が数値であるかどうかが判断されるようです..

4

4 に答える 4

5

私が知っているように、PHP は強く型付けされていないため、これらのヘルパー関数の多くが本当に必要です。今週初めに isset について同様の質問を投稿しました(それほど似ていませんが)。注意すべきことの 1 つは、PHP が文字列を比較のために整数値に変更する場合があることです (型が混在している場合)。これは見逃せません。これは有力なケースだと思いますis_numeric

PHPマニュアルより

数値を文字列と比較する場合、または比較に数値文字列が含まれる場合、各文字列は数値に変換され、数値として比較が実行されます。これらの規則は、switch ステートメントにも適用されます。比較が === または !== の場合、値だけでなく型も比較するため、型変換は行われません。

もう 1 つ考えるべきことは、PHP の「0 とは何か」ということです。それは多くのことを意味します。必ずしも数値ではありません。数値文字列、ブール値の false、整数などの可能性があります。これが、これらのヘルパー関数が存在する理由です。

私の答えに追加するには:

あなたの例を変更してください:

$whatami='beast';  
($whatami<5) ? echo 'less than 5' : echo 'more than 5';

PHP は 'beast' をそれに相当する整数に変更してから比較を行います。これにより、意図しない結果が生じる可能性があります。本当に似たようなものが必要な場合は、別の条件でラップする必要があります。

$whatami='beauty';  
if(is_numeric($whatami){
    ($whatami<5) ? echo 'less than 5' : echo 'more than 5';
} else {
    exit('what, am I not pretty enough for a beast?');
}

次に、意図した結果が得られます(奇妙かもしれませんが)。

于 2010-07-23T04:07:16.600 に答える
2

「ある変数が数値であるかどうかを評価できる」と「ある変数が正の数であるかどうかを評価できる」には大きな違いがあります。>比較記号を使用するには、2 回 ( &<=または>=&の両方で) テストする必要があり<、すぐにはわからない場合があります。is_numericこれは、テストが 1 つしか必要ないことを意味し、何をしているのかが非常に明確になります。

また、文字列は 0 として評価されます。つまり、アイデアが破棄されます。適切なコマンドに固執してください:)

コメントによると:この場合、is_numeric0 を除く正の数のテストと比較するように求めてis_numericいます。答えまたは範囲の一部として 0 を含む数学的チェックを行う場合は、 が必要is_numericになります。それ以外の場合は必要ありません。質問の最初の部分では別の質問をするので、次のようになります。

単純な比較記号 >,>= とその逆のコンポーネントは、特定の変数が数値であるかどうかを評価できるようです-不正解

is_numeric()正の値 (数値 > 0) に使用が必要な場合はありますか? -いいえ

上記の比較記号を使用すると、変数が数値であるかどうかを判断できるようです-いいえ。変数が数値ではなく、ゼロ以外の数値またはunknownであるかどうかを判断できます。

于 2010-07-23T03:59:24.690 に答える
0

比較は、演算子の左側のデータのタイプによって異なります。

覚えておくべき重要なことは、PHP は厳密に型指定された言語ではないということです。数値を比較して、それが数値であることを確認したい場合は、はい、is_numeric()良いチェックになります。例えば、

echo (is_numeric($whatami) && $whatami < 0) ? 'number greater than zero' : 'NaN or negative';

ただし、これを一般化してはなりません。あなたがやりたいことについてもっとコメントできれば、より詳細な答えが見つかるかもしれません。

于 2010-07-23T03:59:57.947 に答える
0

はい、場合もあります。

例えば:

var_dump("5aa" > 4); //bool(true)
var_dump("5aa" > 6); //bool(false)

ご覧のとおり、 から への変換"5aa"int(5). 何が得られるか見てみましょうis_numeric:

var_dump(is_numeric("5aa")); //bool(false)

だから、is_numericより厳密です。必要かどうかはアプリケーションによって異なります。

数値文字列と数値がまったく同じではない場合があることに注意してください。

var_dump("255" & "2"); //string(1) "2" 
var_dump(255 & 2); //int(2)

ビット単位の操作を参照してください。

データ型の変換に注意してください。左側と右側の両方のパラメータが文字列の場合、ビット単位の演算子は文字の ASCII 値を操作します。

于 2010-07-26T00:22:12.300 に答える