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

Moa*_*oak 21 php arguments type-hinting

我希望我的函数能够期望字符串/整数或者合适,例如:

警告:preg_match()期望参数2为字符串

但是对于这个功能

public function setImage($target, $source_path, integer $width, integer $height){...
Run Code Online (Sandbox Code Playgroud)

我明白了:

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

但:

function(array $expectsArray)
Run Code Online (Sandbox Code Playgroud)

按照我的预期工作,我将如何实现与整数和字符串相同的效果?

大更新

PHP 7现在支持Scalar Type Hinting

function increment(int $number) {
     return $number++;
}
Run Code Online (Sandbox Code Playgroud)

Gor*_*don 25

标量TypeHints从PHP 7开始提供:

标量类型声明有两种形式:强制(默认)和严格.现在可以强制执行以下参数类型(强制或严格):字符串(字符串),整数(int),浮点数(浮点数)和布尔值(bool).它们扩充了PHP 5中引入的其他类型:类名,接口,数组和可调用.

在PHP7之前,标量没有类型提示.PHP 5.3.99确实有标量类型提示但是如果它们停留在那时它们还没有最终确定,那么它们将如何工作.

然而,在PHP7之前可以选择强制执行标量参数.

有一些is_*功能可以让你这样做,例如

要提出警告,你可以使用

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
}
Run Code Online (Sandbox Code Playgroud)

替代

如果你想拼命使用Scalar Type Hints,请看一下

它显示了一种通过自定义错误处理程序强制执行标量类型提示的技术.


小智 5

你可以像(int)$ height一样使用"Type Juggling".

例如:

function setImage($target, $source_path, integer $width, $height) {
    $height = (int)$height;
    ...
}
Run Code Online (Sandbox Code Playgroud)