PHP:声明一个 "numeric" 类型

PHP: Declaring a "numeric" type

现代版本的 PHP、we can declare many different types、联合类型甚至 mixed。但是,我使用 Magento 2,通常无法知道您是否要将 7'7' 的 ID 传递给您的方法

我的目标是验证(如果可能的话使用类型声明)输入值是否可以成功转换为或​​已经是整数。由于 MySQL WHERE 条件对整数和仅包含数字的字符串的处理方式相同,因此许多 LAMP 应用程序对于将整数与字符串传递给处理 ID 的方法并不严格。但是,如果我简单地声明一个 int|string 的联合类型,那么它将接受不是数字的值“example”,并且一旦达到 MySQL 就会出错。所以,我找不到一种方法来验证声明中的输入。

如果我无法控制发送到我的方法的内容,是否有一种干净的方法来声明数字类型?

您可以只声明 int 作为函数输入参数的类型,PHP 将自动接受字符串化整数(例如 '7')并将其强制转换为 int,但是尝试传入任何其他字符串将导致异常。

示例:

function foo(int $bar) { 
 var_dump($bar); 
}

echo "These ones are all ok:".PHP_EOL;
foo(7);
foo('7');
foo("7345");

echo PHP_EOL."And now for a bad one...".PHP_EOL;
foo("sgjhdfkg");

输出:

These ones are all ok:

int(7)

int(7)

int(7345)

And now for a bad one...

Fatal error: Uncaught TypeError: foo(): Argument #1 ($bar) must be of type int, string given

现场演示:https://3v4l.org/LnQvW