您好,欢迎访问一九零五行业门户网

期待已久的PHP方法参数类型约束它来咯

本篇文章给大家介绍一下php的方法参数类型约束。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
在之前的文章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 givenfunction 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);}, '回调函数');
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202001/%e5%85%b3%e4%ba%8ephp%e7%9a%84%e6%96%b9%e6%b3%95%e5%8f%82%e6%95%b0%e7%b1%bb%e5%9e%8b%e7%ba%a6%e6%9d%9f.md
推荐学习:php视频教程
以上就是期待已久的php方法参数类型约束它来咯的详细内容。
其它类似信息

推荐信息