Home  >  Article  >  Backend Development  >  The long-awaited PHP method parameter type constraint is here

The long-awaited PHP method parameter type constraint is here

醉折花枝作酒筹
醉折花枝作酒筹forward
2021-06-10 17:31:301573browse

This article will introduce you to PHP's method parameter type constraints. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.

The long-awaited PHP method parameter type constraint is here

In the previous article about PHP method parameters, we talked about some tips about PHP method parameters. Today, what we bring is a more in-depth study of the parameter types of methods in PHP.

After PHP5, PHP officially introduced method parameter type constraints. That is, if the type of method parameters is specified, passing parameters of different types will cause an error. In the PHP manual, method type constraints are limited to classes, interfaces, arrays, or callable callback functions. If a default value of NULL is specified, then we can also pass NULL as a parameter.

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,

In this example, we defined the parameter type as class A, so when we pass a scalar type, an error message will be returned directly.

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

It is clearly stated in the manual that scalar types cannot use type constraints. But it can actually be used, but if they are all scalar types, they will be forced to convert each other, which will not play a good constraint role. For example, in the above example, the int and string types are forced to convert each other.

If a non-scalar type is specified, an error will be reported. This is the focus of this article, friends, please draw a line. In fact, to put it bluntly, if we want to specify the type of the parameter as a fixed scalar type, specifying it in the parameter is not a good choice. It is best to make another type judgment in the method.

And if there is a forced transfer in the parameters, it will also lead to bias in the internal judgment of the method.

Finally, let’s take a look at the type constraints of interfaces and anonymous methods. Anonymous parameter types are very common in frameworks like 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);
}, '回调函数');

Test code:

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

Recommended learning: php video tutorial

The above is the detailed content of The long-awaited PHP method parameter type constraint is here. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete