La contrainte de type de paramètre de méthode PHP tant attendue est ici

醉折花枝作酒筹
Libérer: 2023-03-10 14:14:02
avant
1585 Les gens l'ont consulté

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.

La contrainte de type de paramètre de méthode PHP tant attendue est ici

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,
Copier après la connexion

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
Copier après la connexion

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);
}, '回调函数');
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal