Heim > Backend-Entwicklung > PHP-Problem > Die lang erwartete Typbeschränkung für PHP-Methodenparameter ist da

Die lang erwartete Typbeschränkung für PHP-Methodenparameter ist da

醉折花枝作酒筹
Freigeben: 2023-03-10 14:14:02
nach vorne
1598 Leute haben es durchsucht

Dieser Artikel stellt Ihnen die Typbeschränkungen für Methodenparameter von PHP vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Die lang erwartete Typbeschränkung für PHP-Methodenparameter ist da

Im vorherigen Artikel über PHP-Methodenparameter haben wir über einige Tipps zu PHP-Methodenparametern gesprochen. Was wir heute bringen, ist eine tiefergehende Untersuchung der Parametertypen von Methoden in PHP.

Nach PHP5 führte PHP offiziell Einschränkungen für Methodenparametertypen ein. Das heißt, wenn der Typ der Methodenparameter angegeben ist, führt die Übergabe von Parametern unterschiedlichen Typs zu einem Fehler. Im PHP-Handbuch sind Methodentypbeschränkungen auf Klassen, Schnittstellen, Arrays oder aufrufbare Callback-Funktionen beschränkt. Wenn als Standardwert NULL angegeben ist, können wir auch NULL als Parameter übergeben.

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,
Nach dem Login kopieren

In diesem Beispiel haben wir den Parametertyp als Klasse A definiert. Wenn wir also einen Skalartyp übergeben, wird direkt eine Fehlermeldung zurückgegeben.

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
Nach dem Login kopieren

Im Handbuch heißt es eindeutig, dass Skalartypen keine Typeinschränkungen verwenden können. Es kann jedoch tatsächlich verwendet werden, aber wenn es sich bei allen um Skalartypen handelt, werden sie gezwungen, sich gegenseitig zu konvertieren, was keine gute Einschränkungsrolle spielt. Im obigen Beispiel werden beispielsweise die Typen int und string gezwungen, sich gegenseitig zu konvertieren.

Wenn ein nicht-skalarer Typ angegeben wird, wird ein Fehler gemeldet. Dies ist der Schwerpunkt dieses Artikels, Freunde, bitte ziehen Sie eine Grenze. Um es ganz klar auszudrücken: Wenn wir den Typ des Parameters als festen Skalartyp angeben möchten, ist es keine gute Wahl, ihn im Parameter anzugeben. Es ist am besten, eine andere Typbeurteilung in der Methode vorzunehmen.

Und wenn die Parameter zwangsweise übertragen werden, führt dies auch zu einer Verzerrung in der internen Beurteilung der Methode.

Abschließend werfen wir einen Blick auf die Typbeschränkungen von Schnittstellen und anonymen Methoden. Anonyme Parametertypen sind in Frameworks wie Laravel sehr verbreitet.

// 接口类型
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);
}, '回调函数');
Nach dem Login kopieren

Testcode:

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
Nach dem Login kopieren

Empfohlenes Lernen: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDie lang erwartete Typbeschränkung für PHP-Methodenparameter ist da. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage