The long-awaited PHP method parameter type constraint is here

醉折花枝作酒筹
Release: 2023-03-10 14:14:02
forward
1585 people have browsed it

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,
Copy after login

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
Copy after login

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);
}, '回调函数');
Copy after login

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
Copy after login

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!

Related labels:
php
source:segmentfault.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template