declare(strict_types=1);
が有効になっていると、PHP 7.0.11で本当に面白いバグを見つけました。array_map()
でもarray_walk()
でも厳密な型ヒントが認識されません。厳密な型を有効にすることで、PHPはコア関数で厳密な型ヒントを使用していますが、そうではありません。 この例のコードを見て、それは例外TypeError例外をスローする必要があります厳密な型ヒントを有効にすると、array_mapは型をとにかく変換します
declare(strict_types=1);
$myArray = [12, 'string value', 'another string value', 5];
array_map('validateMyArrayValues', $myArray);
function validateMyArrayValues(string $item)
{
var_dump($item);
}
var_dump
結果は次のとおりです。
test.php:13:
string(2) "12"
test.php:13:
string(12) "string value"
test.php:13:
string(20) "another string value"
test.php:13:
string(1) "5"
すべての整数値は明らかに問題である文字列に型変換されています。これは、私が一緒にdeclare(strict_types=1);
を落とすと、is_*
の機能と投げ例外を使用して質問を提起する?
*厳密な型が必要な場合は、PHPを使用しないでください。その利点の1つはその緩いタイプです –
@ raina77owはい、はいそれはちょっと変わったbheaviourです。不思議なことにintで正しく動作します。実際には、誰かがバグレポートをPHP devグループに投稿できるのであれば、PHP 7.1も影響を受けるので本当にうれしいです。私は適切なバグレポートを作成するのが得意ではありません。 –
@Dagon rightしかし、すべてのプログラミング言語には長所と短所があります。 –