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

Jun 10, 2021 pm 05:31 PM
php

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!

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

CakePHP Datum und Uhrzeit

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

CakePHP-Projektkonfiguration

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

CakePHP-Datei hochladen

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

CakePHP-Routing

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

Besprechen Sie CakePHP

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP-Kurzanleitung

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein

See all articles