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

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

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-06-10 17:31:301530Durchsuche

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,

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

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

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen