如何强制参数为整数/字符串

2022-08-30 17:46:54

我希望我的函数期望字符串/整数或抛出一个拟合,例如:

警告:preg_match() 要求参数 2 为字符串

但是对于此功能

public function setImage($target, $source_path, integer $width, integer $height){...

我得到:

传递给My_Helper_Image::setImage() 的参数 4 必须是整数的实例,给定整数

但:

function(array $expectsArray)

工作如我所料,如何达到与整数和字符串相同的效果?

大更新

PHP 7 现在支持标量类型提示

function increment(int $number) {
     return $number++;
}

答案 1

标量类型说明从 PHP 7 开始可用

标量类型声明有两种类型:强制(默认)和严格。现在可以强制实施以下参数类型(强制或严格):字符串(字符串)、整数(int)、浮点数(浮点数)和布尔值(布尔值)。它们增强了 PHP 5 中引入的其他类型:类名、接口、数组和可调用。

在 PHP7 之前没有标量的类型提示。PHP 5.3.99 确实有标量类型,但如果它们留下来以及它们将如何工作,那么在这一点上还没有最终确定。

尽管如此,在 PHP7 之前还是有强制执行标量参数的选项。

有几个功能可以让你做到这一点,例如is_*

要引发警告,您可以使用

带有 for .E_USER_WARNING$errorType

function setInteger($integer)
{
    if (FALSE === is_int($integer)) {
        trigger_error('setInteger expected Argument 1 to be Integer', E_USER_WARNING);
    }
    // do something with $integer
}

另类

如果你想拼命使用标量类型提示,看看

它显示了通过自定义错误处理程序强制执行标量类型约束的技术。


答案 2

您可以使用“类型杂耍”,如(int)$height。

例如:

function setImage($target, $source_path, integer $width, $height) {
    $height = (int)$height;
    ...
}

推荐