Heim  >  Artikel  >  Backend-Entwicklung  >  So lernen Sie Methodenparametertypdeklarationen

So lernen Sie Methodenparametertypdeklarationen

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-06-22 16:12:172246Durchsuche

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.

So lernen Sie Methodenparametertypdeklarationen

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);

int-Typ

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.

Float-Typ

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.

String-Typ

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

bool-Typ

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.

Lernen Sie einen neuen iterierbaren Typ

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.

Zusammenfassung

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!

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