PHP 7 支持资源的严格类型吗?如果是这样,怎么办?
例如:
declare (strict_types=1);
$ch = curl_init ();
test ($ch);
function test (resource $ch)
{
}
上面会报错:
致命错误:未捕获类型错误:传递给 test() 的参数 1 必须是给定资源的资源实例
var_dump 上$ch
揭示它是资源(4,卷曲),手册上说curl_init ()
返回一个资源。
是否有可能严格输入test()
功能来支持$ch variable
?
PHP 没有资源的类型提示 https://wiki.php.net/rfc/scalar_type_hints because
不添加资源的类型提示,因为这会阻止从资源移动到现有扩展的对象,而有些扩展已经这样做了(例如 GMP)。
但是,您可以使用is_resource() http://php.net/is_resource在函数/方法体内验证传递的参数并根据需要进行处理。可重用的版本将是这样的断言:
function assert_resource($resource)
{
if (false === is_resource($resource)) {
throw new InvalidArgumentException(
sprintf(
'Argument must be a valid resource type. %s given.',
gettype($resource)
)
);
}
}
然后您可以在代码中使用它,如下所示:
function test($ch)
{
assert_resource($ch);
// do something with resource
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)