Ich habe die folgende neue Zeile in PHP 7 gesehen, aber niemand erklärt wirklich, was es bedeutet. Ich habe es gegoogelt und alles, worüber sie sprechen, ist, ob Sie es aktivieren oder nicht wie eine Umfrage.
declare(strict_types = 1);
Was tut es? Wie wirkt es sich auf meinen Code aus? Sollte ich es tun?
Eine Erklärung wäre schön.
php
php-7.2
strong-typing
weak-typing
Sufuko
quelle
quelle
Antworten:
Aus dem Baumhaus-Blog :
Standardmäßig wandelt PHP Werte des falschen Typs nach Möglichkeit in den erwarteten Skalartyp um. Beispielsweise erhält eine Funktion, die eine Ganzzahl für einen Parameter erhält, der eine Zeichenfolge erwartet, eine Variable vom Typ Zeichenfolge.
Strenge Typen deaktiviert ( Bewertung ):
Es ist möglich, den strengen Modus pro Datei zu aktivieren. Im strengen Modus wird nur eine Variable vom genauen Typ der Typdeklaration akzeptiert oder ein TypeError ausgelöst. Die einzige Ausnahme von dieser Regel besteht darin, dass einer Funktion, die einen Float erwartet, eine Ganzzahl zugewiesen werden kann. Funktionsaufrufe innerhalb interner Funktionen sind von der Deklaration strict_types nicht betroffen.
Um den strengen Modus zu aktivieren, wird die Anweisung declare mit der Deklaration strict_types verwendet:
Strenge Typen aktiviert ( Bewertung ):
Arbeitsbeispiel:
quelle
strict_types
beeinflusst den Typenzwang.Die Verwendung von Typhinweisen ohne
strict_types
kann zu subtilen Fehlern führen.Vor strengen Typen
int $x
bedeutet "$x
muss einen Wert haben, der zu einem int erzwungen werden kann ". Jeder Wert, der zu einem erzwungen werden könnte,int
würde den Typhinweis übergeben, einschließlich:242
),10.17
),true
),null
, oder"13 Ghosts"
).Durch die Einstellung
strict_types=1
teilen Sie der Engine mit, dassint $x
"$ x nur ein int-Eigen sein darf, kein Zwang vom Typ erlaubt ist." Sie haben die große Sicherheit, dass Sie genau und nur das bekommen, was gegeben wurde, ohne Konvertierung und potenziellen Verlust.Beispiel:
Ergibt ein möglicherweise verwirrendes Ergebnis:
Die meisten Entwickler würden, glaube ich, einen
int
Hinweis erwarten, der "nur ein int" bedeutet. Aber das tut es nicht, es bedeutet "so etwas wie ein Int". Das Aktivieren von strict_types ergibt das wahrscheinlich erwartete und gewünschte Verhalten:Ausbeuten:
Ich denke, hier gibt es zwei Lektionen, wenn Sie Tipphinweise verwenden:
strict_types=1
immer.strict_types
Pragma hinzuzufügen .quelle
strict_types
.