1

不思議なことに、次のコードは true を返します!

 if ('1'==1 && '014'==016)
    echo 1;

出力は

  1

「014」が「016」に等しい理由を誰か教えてもらえますか? この問題を解決するにはどうすればよいですか?また、可能な場合は、データ型が常に変化するため、明示的な変換を避ける必要があります。

私はPHPバージョン5.3.8-ZS5.5.0を使用しています

4

3 に答える 3

3

PHP では、先頭にゼロを付けた整数値を使用すると、PHP はそれが 8 進数であると想定します。8 進数の 016 は 10 進数の 14 と同じです。

のような文字列を使用すると、別の整数との比較で使用する'014'と暗黙的に 10 進数にキャストされます。14

http://php.net/manual/language.types.integer.phpを参照してください。

于 2013-11-08T03:08:23.757 に答える
0

これを試してみてください。

<?php

if (ltrim((int)'1',0) == ltrim(1,0) && ltrim((int)'014',0)== ltrim('016', '0'))
     echo 1;
于 2013-11-08T05:19:08.033 に答える