In diesem Artikel erfahren Sie, wie Sie die Typdeklaration von Methodenparametern erlernen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Egal in welcher Branche Sie tätig sind, es ist mittlerweile ein Trend zum Leben und Lernen, insbesondere für diejenigen unter uns, die Programmierer sind. Es versteht sich von selbst, dass die neue Technologie dieses Mal nicht anwendbar ist. Wenn Sie nur die PHP-Dokumentation studieren, werden Sie feststellen, dass es viele Wissenspunkte gibt, die Sie nicht wirklich verstehen, beispielsweise die Typdeklaration dieses Methodenparameters.
Im letzten Artikel haben wir zu den Typbeschränkungen von PHP-Methoden gesagt, dass die Typbeschränkungen von Methodenparametern auf Klassen, Schnittstellen, Arrays oder aufrufbare Rückruffunktionen beschränkt sind Modusdefinition in PHP: Wenn der strikte Modus angegeben ist, ist es auch effektiv, einen gewöhnlichen Skalartyp für den Methodenparametertyp anzugeben.
Definition des strikten Modus:
declare (strict_types = 1);
function testInt(int $a) { echo $a, PHP_EOL; } testInt(1); // testInt(1.1); // Fatal error: Uncaught TypeError: Argument 1 passed to testInt() must be of the type int // testInt('52AABB'); // Fatal error: Uncaught TypeError: Argument 1 passed to testInt() must be of the type int // testInt(true); // Fatal error: Uncaught TypeError: Argument 1 passed to testInt() must be of the type int
Im strikten Modus ist es offensichtlich, dass die Parameter dieser Methode nur Werte vom Typ int empfangen können und andere Typen natürlich nicht empfangen werden können keine erzwungene Konvertierung wie im vorherigen Artikel erwähnt.
function testFloat(float $a) { echo $a, PHP_EOL; } testFloat(1); testFloat(1.1); // testFloat('52AABB'); // Fatal error: Uncaught TypeError: Argument 1 passed to testInt() must be of the type int // testInt(true); // Fatal error: Uncaught TypeError: Argument 1 passed to testInt() must be of the type int
Hier ist zu beachten, dass PHP nur int und float hat und float eine Obermenge von int ist, sodass hier Ganzzahlen übergeben werden können, der obige testInt(int $a) jedoch nicht empfangen werden kann A Float-Wert wie 1,1. Dies beinhaltet das Problem der Auf- und Abwärtskonvertierung. Die Konvertierung in eine Obermenge ist in Ordnung, die Konvertierung einer Obermenge in eine Teilmenge ist jedoch nicht in Ordnung.
function testString(string $a) { echo $a, PHP_EOL; } // testString(1); // Fatal error: Uncaught TypeError: Argument 1 passed to testString() must be of the type string // testString(1.1); // Fatal error: Uncaught TypeError: Argument 1 passed to testString() must be of the type string testString('52AABB'); // testString(true); // Fatal error: Uncaught TypeError: Argument 1 passed to testString() must be of the type string
Wenn wir im nicht-strikten Modus einen Empfangsparameter vom Typ String definieren, kann hier tatsächlich jeder Typ als String-Typ empfangen werden Es gibt nicht viel zu sagen, man kann sagen, dass die Definition des String-Typs im nicht strikten Modus die gleiche Wirkung hat, als hätte man überhaupt keine Definition. Im strikten Modus ist es jedoch anders. Es kann tatsächlich nur Zeichenfolgeninhalte in doppelten oder einfachen Anführungszeichen empfangen. Das Gleiche gilt für den
function testBool(bool $a) { var_dump($a); } testBool(true); testBool(false); // testBool('52AABB'); // Fatal error: Uncaught TypeError: Argument 1 passed to testBool() must be of the type bool // testBool(1); // Fatal error: Uncaught TypeError: Argument 1 passed to testBool() must be of the type bool
Boolean-Wert. Hier können wir nur die Werte der Schlüsselwörter true und false erhalten.
Lassen Sie uns abschließend einen neuen Typ vorstellen. Zusätzlich zu Klassen, Arrays, Rückruffunktionen im normalen Modus und verschiedenen Skalartypdeklarationen im strikten Modus gibt es auch eine iterierbare Typdeklaration I glaube Wie Sie an diesem Wort erkennen können, handelt es sich um einen iterierbaren Typ.
function testIterable(iterable $iterator) { echo gettype($iterator), ':', PHP_EOL; foreach ($iterator as $it) { echo $it, PHP_EOL; } } testIterable([1, 2, 3]); testIterable(new ArrayIterator([1, 2, 3])); // Generator对象 testIterable((function () { yield 1; yield 2; yield 3; })()); // testIterable(1); // Fatal error: Uncaught TypeError: Argument 1 passed to testIterable() must be iterable
Ja, es enthält Arrays, Klassen, die die Iteratorschnittstelle implementieren, und Generator-bezogene Inhalte. Das heißt, alle Inhalte, die von foreach iteriert werden können, können übergeben werden. Der Generator selbst wird ein Generator-Objekt sein, und in diesem Artikel über das Erlernen der Verwendung von PHP-Generatoren haben wir bereits den Inhalt dieses Generator-Objekts gesehen, das selbst auch die Iterator-Schnittstelle implementiert.
Wie eingangs erwähnt, stellt sich heraus, dass unsere Grammatik im strengen Modus so unterschiedlich sein wird. Diesmal habe ich wirklich viel gelernt. Wir haben noch einen langen Weg vor uns, um zu lernen, und ich hoffe, dass Sie weiterhin aufmerksam sein und hart zusammenarbeiten können! !
Testcode:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/%E5%86%8D%E6%AC%A1%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95%E5%8F%82%E6%95%B0%E7%B1%BB%E5%9E%8B%E5%A3%B0%E6%98%8E.php
Empfohlenes Lernen: php-Video-Tutorial
Das obige ist der detaillierte Inhalt vonSo lernen Sie Methodenparametertypdeklarationen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!