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
现代版本的 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