Cet article vous présentera les contraintes de type de paramètre de méthode PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Dans l'article précédent sur les paramètres de méthode PHP, nous avons parlé de quelques astuces sur les paramètres de méthode PHP. Aujourd’hui, nous apportons une étude plus approfondie des types de paramètres des méthodes en PHP.
Après PHP5, PHP a officiellement introduit les contraintes de type de paramètre de méthode. Autrement dit, si le type des paramètres de méthode est spécifié, la transmission de paramètres de types différents provoquera une erreur. Dans le manuel PHP, les contraintes de type de méthode sont limitées aux classes, interfaces, tableaux ou fonctions de rappel appelables. Si une valeur par défaut de NULL est spécifiée, nous pouvons également passer NULL en paramètre.
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,
Dans cet exemple, nous avons défini le type de paramètre comme classe A, donc lorsque nous transmettons un type scalaire, un message d'erreur sera renvoyé directement.
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
indique clairement dans le manuel que les types scalaires ne peuvent pas utiliser de contraintes de type. Mais cela peut effectivement être utilisé, mais s'ils sont tous de type scalaire, ils seront obligés de se convertir les uns les autres, ce qui ne jouera pas un bon rôle de contrainte. Par exemple, dans l'exemple ci-dessus, les types int et string sont obligés de se convertir. Si
spécifie un type non scalaire, une erreur sera signalée. C’est l’objet de cet article, mes amis, veuillez tracer une ligne. En fait, pour le dire franchement, si nous voulons spécifier le type du paramètre comme un type scalaire fixe, le spécifier dans le paramètre n'est pas un bon choix. Il est préférable de faire un autre jugement de type dans la méthode.
Et si les paramètres sont forcés d'être transférés, cela entraînera également des biais dans le jugement interne de la méthode.
Enfin, jetons un œil aux contraintes de type des interfaces et des méthodes anonymes. Les types de paramètres anonymes sont très courants dans les frameworks comme 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); }, '回调函数');
Code de test :
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
Apprentissage recommandé : Tutoriel vidéo php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!