1. 型変換の問題
intval(); var_dump(intval('1asdfasd')); //1 var_dump(intval('awqw12')); //0 var_dump(intval(array())); //0 var_dump(intval(array('foo','val'))); //1 var_dump(intval(0x1A)); //26 十六进制转换 var_dump(intval('asdfqwer')); //0
intval 変換された値が文字列の場合はエラーは返されませんが、変換された値が空の場合は 2 つの状況があります。配列の場合は 0 が返され、それ以外の場合は 1 が返されます
注: PHP は 32 ビットのメモリを使用して、符号付きの場合は 4294967296 の数値を表現できます。
2. 組み込み関数の緩みの問題switch(); $i='3adcd'; switch($i){ case 1: echo 'i is 1'; break; case 2: echo 'i is 2'; break; case 3: echo 'i is 3'; break; default: echo 'i is default'; break; }上記の結果は switch case 3 に入ります。なぜこのようなことが起こるのでしょうか? switch が数値型の場合、switch は実行時にパラメータを int クラスに変換します。上記では、最初に $i を入力すると、変換結果は 3 になります。 。 。
in_array(); $arr = [0,1,2,3,'test']; var_dump(in_array('abd',$arr)); // true var_dump(in_array('1bc',$arr)); // trueなぜ上記の実行結果はこのようになるのでしょうか?後でマニュアルを調べてみると、in_array のデフォルトでは、値が等しいかどうかのみを比較し、型が等しいかどうかは比較しないという公式の記述があります。の値が同じであるため、上記の結果が得られます。この結果に対して、in_array 関数の 3 番目のパラメーターを True に設定すると、厳密な比較方法が得られます。 以上は、日々の開発において注意すべき点です。