In diesem Artikel wird die Herausforderungen der Type der Type in PHP 5 untersucht und die Erweiterung "Augmented Type" als Lösung eingeführt. Während PHP 7 integrierte Skalartyp-Deklarationen bietet, bietet diese Erweiterung ähnliche Funktionen für ältere PHP-Versionen.
Das Problem: Schwaches Typing in PHP 5
Die dynamische Typisierung vonPhp 5 kann zu unerwartetem Verhalten führen. Stellen Sie sich eine Funktion vor, um eine Zahl zu erhöhen:
function plusone($a) { return $a + 1; }
Diese Funktion akzeptiert verschiedene Eingabetypen und führt implizite Typumwandlungen durch. Das Hinzufügen einer robusten Typprüfung erfordert manuelle Validierung:
function plusone($a) { if (!is_numeric($a)) throw new InvalidArgumentException("Only numbers!"); return $a + 1; }
PHP 5 fehlt auch die Durchsetzung des automatischen Rückgabetyps.
Augmented Typen: Eine Php 5 -Lösung
Die Erweiterung des Box -Teams nutzt PHPDOC -Anmerkungen, um die Sicherheit der Typ zur Laufzeit durchzusetzen. Es vermeidet Kernänderungen oder Gabeln.
Installation (für PHP 5):
Befolgen Sie diese Schritte (Ubuntu -Beispiel, Anpassungs an andere Systeme):
sudo apt-get update
sudo apt-get install php5-dev bison flex
git clone git@github.com:box/augmented_types.git
phpize; ./configure --enable-augmented_types; make; make test; sudo make install
php.ini
(finden Sie ihren Standort mit php -i | grep 'Loaded Configuration File'
): add zend_extension=/path/to/augmented_types.so
. Aktivieren Sie die Erweiterung pro Datei mit ini_set("augmented_types.enforce_by_default", 1);
oder global in php.ini
.
Verwendung:
Augmented Typen verwendet PHPDOC für Typdeklarationen. Zum Beispiel:
/** * @param int $a * @return int */ function plusone($a) { return $a + 1; }
nun führt die Übergabe eines Nichteigers an plusone()
zu einem Laufzeitfehler. Die Erweiterung unterstützt zusammengesetzte Typen (@param int|float $a
), Array -Typen (@param int[] $a
) und die Durchsetzung von Rückgabetypen, einschließlich @return void
.
ignorieren Dateien:
Verwenden Sie, um Fehler durch externe Bibliotheken zu verhindern, augmented_types_blacklist()
oder die augmented_types.blacklist
und augmented_types.whitelist
-Richtlinien in php.ini
, um zu verwalten, welche Dateien überprüft werden.
Php 7 und darüber hinaus:
Php 7 von Php 7, der angedeutet wird, dass diese Erweiterung für neue Projekte weitgehend unnötig ist. "Augmented Typen" bietet jedoch Funktionen, die in Php 7 nicht zu finden sind, z. B. Komposit- und Array -Typdeklarationen. Denken Sie daran, dass es Runtime Overhead hinzufügt und hauptsächlich während der Entwicklung und Tests verwendet werden sollte.
Schlussfolgerung:
Während PHP 7 eine überlegene Sicherheitstypsicherheit bietet, bietet die Erweiterung "Augmented Typen" eine wertvolle Lösung für die Aufrechterhaltung der Type Sicherheit in Legacy PHP 5 -Anwendungen. Die zusätzlichen Funktionen sind für die Leistungskosten für Entwicklung und Test ideal, aber nicht für Produktionsumgebungen.
häufig gestellte Fragen (FAQs): (Diese sind im Originaltext bereits gut bedeckt, sodass ich sie hier nicht wiederholen werde. Der ursprüngliche FAQ-Abschnitt ist umfassend.)
Das obige ist der detaillierte Inhalt vonKönnen wir statische Typen in PHP ohne PHP 7 oder HHVM haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!