温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP的方法参数类型约束实例讲解

发布时间:2021-09-13 17:37:38 来源:亿速云 阅读:318 作者:chen 栏目:大数据

这篇文章主要讲解了“PHP的方法参数类型约束实例讲解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP的方法参数类型约束实例讲解”吧!

 

关于PHP的方法参数类型约束

在PHP5之后,PHP正式引入了方法参数类型约束。也就是如果指定了方法参数的类型,那么传不同类型的参数将会导致错误。在PHP手册中,方法的类型约束仅限于类、接口、数组或者callable回调函数。如果指定了默认值为NULL,那么我们也可以传递NULL作为参数。

class A{}
function testA(A $a){
   var_dump($a);
}

testA(new A());
// testA(1);
// Fatal error: Uncaught TypeError: Argument 1 passed to testA() must be an instance of A, int given,
 

在这个例子中,我们定义了参数类型为A类,所以当我们传递一个标量类型时,直接就会返回错误信息。

function testB(int $a){
   var_dump($a);
}
testB(1);
testB('52aadfdf'); // 字符串强转为int了
// testB('a');
// Fatal error: Uncaught TypeError: Argument 1 passed to testB() must be of the type int, string given

function testC(string $a){
   var_dump($a);
}
testC('测试');
testC(1);  // 数字会强转为字符串
// testC(new A());
// Fatal error: Uncaught TypeError: Argument 1 passed to testC() must be of the type string
 

在手册中明确说明了标量类型是不能使用类型约束的。但其实是可以使用的,不过如果都是标量类型则会进行相互的强制转换,并不能起到很好的约束作用。比如上例中int和string类型进行了相互强制转换。指定了非标量类型,则会报错。此处是本文的重点,小伙伴们可要划个线了哦。其实说白了,如果我们想指定参数的类型为固定的标量类型的话,在参数中指定并不是一个好的选择,最好还是在方法中进行再次的类型判断。而且如果参数中进行了强转,也会导致方法内部的判断产生偏差。

最后我们再看一看接口和匿名方法的类型约束。匿名参数类型在Laravel等框架中非常常见。

// 接口类型
interface D{}
class childD implements D{}
function testD(D $d){
   var_dump($d);
}
testD(new childD());

// 回调匿名函数类型
function testE(Callable $e, string $data){
   $e($data);
}
testE(function($data){
   var_dump($data);
}, '回调函数');
 


感谢各位的阅读,以上就是“PHP的方法参数类型约束实例讲解”的内容了,经过本文的学习后,相信大家对PHP的方法参数类型约束实例讲解这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI