-3

ここで1つのPHPスニペットでこれをオンラインで見ました。

/**
 * @param string $str subject of test for integerness
 * @return bool true if argument is an integer string
 */
function intStr($str) {
    return !!preg_match('/^\d+$/', $str);
}

このコードスニペットを実行すると、次のようになります。

> var_dump( intStr("abc") );
bool(false)

> var_dump( intStr("123") );
bool(true)

質問:

  1. 二重感嘆符は有効な演算子ですか、それともそれ自体を否定する「not-not」と同じですか?

  2. またpreg_match、なぜこの演算子は関数と組み合わせて使用​​されるのですか?

4

3 に答える 3

2

preg_match は 0 または 1 (またはエラーの場合は false) を返し、この intStr 関数はブール値を返すことを意図しています。単一は!$x最初にブール値に変換$xされ、次に否定されます。!!$xこの否定を元に戻すだけなので、短い書き方になります(bool)$x

ただし、このように 4 文字を節約すると、可読性が失われます (さらに 2 つの不要な操作がありますが、無視できる程度です)。そのため、お勧めしません。

巧妙なコードですが、プログラミングにはルールがあります。

于 2013-03-05T08:44:20.417 に答える
0

この簡略化された関数の実行:

function test($value) {
    return !!$value;
}

テスト:

> var_dump( test(1) );
bool(true)

> var_dump( test(0) );
bool(false)

> var_dump( test('1') );
bool(true)

> var_dump( test('0') );
bool(false)

> var_dump( is_bool( test('abc') ) );
bool(true)

> var_dump( is_bool( test('0') ) );
bool(true)

観察:

を使用して出力を確認しis_boolました。どうやらそれはどういうわけか出力をブール値にキャスト/強制します。

結論:

PHPマニュアルから、

preg_match()パターンが指定された件名に一致する場合は1を返し、一致しない場合は0を返し、エラーが発生した場合はFALSEを返します。

この関数は、。によって返される整数値の可能性ではなく、戻り値をブール値に強制すると結論付けることができますpreg_match

于 2013-03-05T08:32:57.577 に答える
0

!!に等しいnot notです。つまり!!'a'、文字列をブール値にキャストし、'a'その逆を返します。したがって、有効な preg_matchを!!preg_match意味します。not not preg_match

于 2013-03-05T08:37:27.100 に答える