PHP は厳密に型指定された言語ではないため、本質的に PHP の関数プロトタイプで厳密な型を強制することはできません。PHP は弱い型付けの言語であり、規則に逆らおうとすると、多くの状況で損をするだけです。また、 is_numeric は、値が int 型であることを保証しません(価値があるため)。
あなたにできることは、そもそもなぜこのアプローチが必要だと思うのかを分析し、バグの可能性を作らずにこれを最適に実装する方法を決定することです。
たとえば、メソッドが期待するのはデータベース クエリの ID である次のシナリオを考えてみましょう。
class MyClass {
public function getUser($id) {
if (!is_int($id)) {
throw new Exception("Invalid argument supplied. Expecting (int), but argument is of type (" . gettype($id) . ").");
}
// Otherwise continue
$db = new PDO($dsn);
$stmt = $db->prepare("SELECT username FROM users WHERE user_id = ?");
$stmt->execute(array($id));
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
}
$MyObject = new MyClass;
$result = $MyObject->getUser($_POST['id']);
/* The problem here is $_POST will always be of type string. */
これが教えてくれることは、ここで型チェックを強制するのは無意味だということです。なぜなら、PHP はそのままにしておくだけで正しいことをしてくれるからです。
自問する必要がある質問は、「厳密な型指定を強制するにはどうすればよいですか?」ではなく、「厳密な型指定を強制する必要があるのはなぜですか?」です。