我希望我的函数可以期望字符串/整数或者合适,例如:
警告:preg_match()期望参数2为字符串
但是对于这个功能
public function setImage($target, $source_path, integer $width, integer $height){...
我明白了:
传递给My_Helper_Image的参数4 :: setImage()必须是整数的实例,给定整数
可是:
function(array $expectsArray)
按照我的预期工作,我将如何实现与整数和字符串相同的效果?
大更新
PHP 7现在supports Scalar Type Hinting
function increment(int $number) {
return $number++;
}
答案 0 :(得分:25)
Scalar TypeHints are available as of PHP 7:
标量类型声明有两种形式:强制(默认)和严格。现在可以强制执行以下参数类型(强制或严格):字符串(字符串),整数(int),浮点数(浮点数)和布尔值(bool)。它们扩充了PHP 5中引入的其他类型:类名,接口,数组和可调用。
在PHP7之前,标量没有类型提示。 PHP 5.3.99 did have scalar typehints但是,如果他们留下来以及他们将如何工作,那时就没有最终确定。
尽管如此,在PHP7之前还可以选择强制执行标量参数。
有几个is_*
功能可以让你这样做,例如
is_int
— Find whether the type of a variable is integer is_string
— Find whether the type of a variable is string 要提出警告,请使用
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
}
如果您想拼命使用标量类型提示,请查看
显示了一种通过自定义错误处理程序强制执行标量类型提示的技术。
答案 1 :(得分:5)
你可以使用" Type Juggling"喜欢(int)$ height。
例如:
function setImage($target, $source_path, integer $width, $height) {
$height = (int)$height;
...
}
答案 2 :(得分:2)
PHP(尚未)实现强类型,因此您不能强制参数为整数。它只适用于类(你暗示$ width应该是类整数的实例的错误)和数组。
类的提示是在PHP 5中提供的,类型提示为从5.1开始的数组,显然标量类型提示可能(或可能不)将来可用。
当然,正如其他人所指出的那样,你可以检查你的函数/方法中的类型,但这与强类型有根本的不同。当然,任何一种方式都会产生预期的效果。
答案 3 :(得分:0)
如果您不使用PHP 7.x,或者可以使用args中的Non-standard PHP library (NSPL)模块。它不像幻想和PHP 7.x类型提示,但进行验证:
use const \nspl\args\numeric;
use function \nspl\args\expects;
function sqr($x)
{
expects(numeric, $x);
return $x * $x;
}
sqr('hello world');
输出:
InvalidArgumentException: Argument 1 passed to sqr() must be numeric, string given in /path/to/example.php on line 17
Call Stack:
0.0002 230304 1. {main}() /path/to/example.php:0
0.0023 556800 2. sqr() /path/to/example.php:17