PHP 8.3 führt ein revolutionäres Feature ein: die Typisierung von Klassenkonstanten. Obwohl PHP bereits in PHP 7.4 die Typisierung von Klasseneigenschaften eingeführt hatte, war diese Neuerung noch nicht auf Konstanten ausgedehnt worden. Bis jetzt.
In der neuen Version wird die Typisierung auf Klassenkonstanten ausgedehnt, auch auf solche in Schnittstellen, Traits und Enums. Diese Änderung hat den großen Vorteil, dass sie das Risiko minimiert, dass Entwickler von der ursprünglichen Absicht einer Konstante abweichen, und so für mehr Klarheit und Sicherheit im Code sorgt.
Die Effektivität von typisierten Klassenkonstanten wird bei der Arbeit mit abgeleiteten Klassen deutlich. In früheren Versionen konnte eine Unterklasse den Wert einer Konstante ändern, aber mit PHP 8.3 ist es nun möglich, versehentliche Änderungen des Typs einer Konstante zu verhindern und gleichzeitig die Konsistenz mit der ursprünglichen Deklaration zu wahren.
Beachten Sie, dass es möglich ist, den Typ einer Klassenkonstante in einer Unterklasse zu "beschränken", indem ein kompatibler oder spezifischerer Typ verwendet wird:
Rückgabewerte, werden derzeit nicht als Typen für Klassenkonstanten in PHP 8.3 unterstützt.
Zusammenfassend lässt sich sagen, dass die konstante Typisierung von Klassen in PHP 8.3 einen Quantensprung in der Softwareentwicklung darstellt. Sie gibt Programmierern ein zusätzliches Werkzeug an die Hand, mit dem sie sicherstellen können, dass der Code nicht nur funktional ist, sondern auch genau und getreu den ursprünglichen Absichten, wodurch Fehler reduziert und die Lesbarkeit und Wartbarkeit des Codes verbessert werden. Diese Innovation stellt eine weitere Entwicklung der Typisierung in PHP dar und festigt seine Position als moderne und robuste Programmiersprache.
Neue Funktion in PHP 8.3: json_validate()
Die Manipulation von in JSON kodierte Daten ist eine gängige Praxis in der Web-Entwicklung. In PHP 8.3 gibt es eine neue Funktion , json_validate()
wurde eingeführt, um diesen Prozess erheblich zu verbessern. Diese Funktion ist besonders nützlich, um die syntaktische Gültigkeit eines JSON-Payloads zu prüfen, bevor mit seiner Verwendung fortgefahren wird.
In früheren Versionen von PHP verließen sich Entwickler auf die Funktion json_decode()
um bei der Umwandlung von JSON-Daten in assoziative Arrays oder Objekte auf Fehler zu prüfen. Diese Methode erforderte jedoch den Einsatz erheblicher Ressourcen für den Aufbau der Array- oder Objektstrukturen, selbst wenn der einzige Zweck darin bestand, die Integrität der JSON-Daten zu prüfen.
Hier ist ein Beispiel dafür, wie die json_decode()
um eine JSON-Nutzlast zu validieren:
$obj = json_decode($maybeJSON);
if (json_last_error() === JSON_ERROR_NONE) {
// Ausführen von Operationen mit $obj
}
In diesem Szenario wurden die Ressourcen hauptsächlich dazu verwendet, die Gültigkeit der JSON-Nutzdaten festzustellen, was im Hinblick auf die Speichernutzung nicht sehr effizient war.
Mit dem Erscheinen von PHP 8.3 ist es möglich, die gleiche Operation effizienter durchzuführen, indem man json_validate()
:
if (json_validate($maybeJSON)) {
// Ausführung von Operationen mit $maybeJSON
}
Das ist wichtig: Es ist zu bedenken, dass es nicht optimal ist, die json_validate()
und leiten die Daten dann durch json_decode()
da dies immer noch Speicherressourcen für die Dekodierung beanspruchen würde. Der ideale Ansatz ist die Verwendung von json_validate()
um die Gültigkeit der JSON-Daten zu bestätigen, bevor weitere Operationen durchgeführt werden, wie z. B. das Speichern der Daten oder die Übermittlung als Antwort auf eine Anfrage. Dies optimiert die Nutzung der Ressourcen und sorgt für eine effizientere Verarbeitung von JSON-Daten.
Tiefes Klonen von Readonly-Eigenschaften in PHP 8.3
Mit PHP 8.3 wurde eine wesentliche Verbesserung bei der Verwaltung von Nur-Lese-Eigenschaften in Klassen. Diese Funktionalität, die zunächst in PHP 8.1 für einzelne Eigenschaften eingeführt und dann in PHP 8.2 auf ganze Klassen ausgeweitet wurde, wurde dank eines kürzlich veröffentlichten RFC (Request For Comments) weiter entwickelt.
Das angesprochene Problem war die Unflexibilität der Verwendung von Klassen mit schreibgeschützten Eigenschaften, was bestimmte Programmiermöglichkeiten einschränkte. Der RFC schlug zwei Hauptlösungen vor:
- Erlaubt die Erweiterung von nicht-lesbaren Klassen aus lesbaren Klassen.
- Neuinitialisierung von schreibgeschützten Eigenschaften während des Klonens zulassen.
Der zweite Vorschlag, der in PHP 8.3 angenommen wurde, ermöglichte einen Durchbruch bei der Verwaltung von Nur-Lese-Eigenschaften. Diese neue Funktionalität ermöglicht es, dass beim Deep Cloning Instanzen einer Klasse mit schreibgeschützten Eigenschaften innerhalb der magische Methode __klonen
. Dies bedeutet, dass die Funktionen, die von __klonen
kann diese Eigenschaften rechtlich verändern.
Hier ist ein praktisches Beispiel aus dem RFC, das das neue Verhalten veranschaulicht:
Klasse Foo {
public function __construct(
public readonly DateTime $bar,
öffentlich schreibgeschützt DateTime $baz
) {}
public function __clone() {
// Beim Klonen erhält $bar ein neues DateTime-Objekt
$this->bar = clone $this->bar;
// Diese Funktion wird aufgerufen
$this->cloneBaz();
}
private function cloneBaz() {
// Dieser Vorgang ist rechtmäßig, wenn er innerhalb von __clone aufgerufen wird
unset($this->baz);
}
}
$foo = new Foo(new DateTime(), new DateTime());
$foo2 = $foo klonen;
Diese neue Funktion erhöht die Flexibilität bei der Verwendung von Klassen mit schreibgeschützten Eigenschaften erheblich und ermöglicht die Verwendung fortschrittlicher und anspruchsvoller Entwurfsmuster, wobei die Integrität und Sicherheit, die schreibgeschützte Eigenschaften bieten, erhalten bleiben.
Einführung in das neue Attribut #[\Override] in PHP 8.3
Mit PHP 8.3 wurde eine wichtige neue Funktion eingeführt, die die Klarheit und Präzision des Codes erheblich verbessert: die #[\Override]. Dieses neue Attribut ist bei der Arbeit mit Vererbung und Schnittstellen in PHP von entscheidender Bedeutung, da es explizit bestätigt, dass eine Methode in einer Tochterklasse dazu bestimmt ist, eine Methode in der Elternklasse zu überschreiben oder eine in einer Schnittstelle definierte Methode zu implementieren.
Das Problem wurde von #[\Override] gelöst: In der Programmierung kann es vorkommen, dass eine Methode in einer abgeleiteten Klasse mit der Absicht geschrieben wird, eine Methode der übergeordneten Klasse zu überschreiben oder eine Methode einer Schnittstelle zu implementieren. Fehler wie Tippfehler im Methodennamen können jedoch dazu führen, dass die Methode die beabsichtigte Methode nicht überschreibt, was zu unerwartetem Verhalten führt, das schwer zu erkennen ist.
So funktioniert #[\Override]: Das Attribut #[\Override] wird verwendet, um sicherzustellen, dass die Methode in einer abgeleiteten Klasse tatsächlich eine Überschreibung einer Methode in der Elternklasse oder eine Implementierung einer Methode in einer Schnittstelle ist. Wenn eine mit #[\Override] markierte Methode nicht mit einer Methode in der übergeordneten Klasse oder Schnittstelle übereinstimmt, erzeugt PHP eine Fehlermeldung, die das Problem sofort sichtbar macht.
Praktisches Beispiel:
Klasse A {
protected function ovrTest(): void {}
}
class B extends A {
#[\Override]
public function ovrTest(): void {} // Richtig: überschreibt die Funktion ovrTest() von A
}
class C extends A {
#[\Override]
public function ovrBest(): void {} // Fehler: ovrBest() existiert nicht in A
}
Dynamischer Abruf von Klassenkonstanten und Enum-Mitgliedern
PHP 8.3 hat auch die dynamische Abfrage von Klassenkonstanten und Enum-Mitgliedern vereinfacht. Früher musste man, um den Wert einer Klassenkonstante oder eines Enum-Mitglieds unter Verwendung einer Variablen für den Namen zu erhalten, die Funktion constant()
. Diese Methode war weniger direkt und könnte in einigen Szenarien komplexer sein.
Mit PHP 8.3 ist es nun möglich, direkt auf diese Konstanten und Mitglieder zuzugreifen, wobei eine einfachere, direktere Syntax verwendet wird:
Klasse MyClass {
public const THE_CONST = 9;
}
enum MyEnum: int {
case FirstMember = 9;
case SecondMember = 9;
}
$constantName = 'THE_CONST';
$memberName = 'FirstMember';
echo MyClass::{$constantName}; // Direkter Zugriff auf die Klassenkonstante
echo MyEnum::{$memberName}->value; // Direkter Zugriff auf das Enum-Mitglied
Diese Neuerungen in PHP 8.3, sowohl die #[\Override] sowohl die Verbesserung des dynamischen Abrufs von Konstanten, stellen wichtige Schritte hin zu einem klareren, sichereren und besser wartbaren Code dar.
Mit PHP 8.3 wurde eine innovative und nützliche Methode zur Erzeugung zufälliger Zeichenketten eingeführt: getBytesFromString()
. Diese Methode, die der Random-Erweiterung von PHP hinzugefügt wurde, vereinfacht die Erstellung von zufälligen Zeichenketten aus einem vordefinierten Zeichensatz erheblich.
So funktioniert getBytesFromString(): Die Funktionalität ist recht einfach. Sie geben eine Zeichenkette an, aus der Sie ziehen wollen, und legen die gewünschte Länge für die Zufallszeichenkette fest. Die Methode getBytesFromString()
wählt dann nach dem Zufallsprinzip Bytes aus Ihrer Quellzeichenkette aus, bis die angegebene Länge erreicht ist.
Praktische Beispiele:
$rando = new Random\Randomizer();
$alpha = 'ABCDEFGHJKMNPQRSTVWXYZ';
// Generieren Sie eine zufällige Zeichenkette aus 6 Zeichen aus $alpha
echo $rando->getBytesFromString($alpha, 6); // z.B.: 'MBXGWL'
Ein interessanter Aspekt der getBytesFromString()
ist, dass er die Erzeugung von Zufallszeichenfolgen erlaubt, die länger als die Eingabezeichenfolge sind. Zum Beispiel:
$rando = new Random\Randomizer();
$nums = '123456';
// Erzeugen einer zufälligen Zeichenkette von 10 Ziffern aus $nums
echo $rando->getBytesFromString($nums, 10); // Z.B.: '2526341615'
.
Zeichengewichtung bei der Eingabe: Eine weitere Besonderheit dieser Methode ist die Möglichkeit der "Gewichtung" der Zeichen in der Eingabe. Wenn bestimmte Zeichen in der Eingabekette häufiger vorkommen, ist es wahrscheinlicher, dass sie in der Zufallsfolge ausgewählt werden. Zum Beispiel:
$rando = new Random\Randomizer();
$weighted = 'JJJJ12345';
// Erzeugen einer zufälligen Zeichenfolge, in der 'A' mit größerer Wahrscheinlichkeit vorkommt
echo $rando->getBytesFromString($weighted, 5); // z.B.: '1AA53'
Zusammenfassend lässt sich sagen, dass die getBytesFromString()
in PHP 8.3 bietet eine einfache und effektive Lösung zur Erzeugung zufälliger Zeichenketten, mit der Flexibilität, die Zeichenverteilung und Länge der resultierenden Zeichenkette anzupassen. Dies macht es zu einem wertvollen Werkzeug für eine Vielzahl von Anwendungen, von der Datenverarbeitung bis hin zu Computersicherheit.
Weitere Änderungen und Verbesserungen in PHP 8.3
Zusätzlich zu den bereits erwähnten wichtigen neuen Funktionen führt PHP 8.3 eine Reihe von Verbesserungen und zusätzliche Funktionalitäten die die Sprache weiter bereichern. Im Folgenden stellen wir einige dieser kleineren Aktualisierungen vor, die trotz ihres geringen Umfangs erhebliche Auswirkungen auf die tägliche Entwicklung haben können.
- Neue Methoden für die Klasse DOMElement: PHP 8.3 erweitert den Umgang mit DOM um zusätzliche Methoden wie
DOMElement::getAttributeNames()
, DOMElement::insertAdjacentElement()
, DOMElement::insertAdjacentText()
und andere, die die Manipulation von DOM-Knoten verbessern.
- Aktualisierungen für IntlCalendar: Die Klasse
IntlCalendar
wurde um Methoden wie die folgenden erweitert IntlCalendar::setDate()
e IntlCalendar::setDateTime()
mehr Flexibilität bei der Verwaltung von Terminen bieten.
- Aktualisierte LDAP-Funktionen: Die neuen Funktionen
ldap_connect_wallet()
e ldap_exop_sync()
die Möglichkeiten der LDAP-Integration zu erweitern.
- Verbesserungen bei Multibyte-Funktionen: Die neue Funktion
mb_str_pad()
fügt weitere Optionen für die Manipulation von Multi-Byte-Strings hinzu.
- Neue POSIX-Funktionen: Funktionen wie
posix_sysconf()
e posix_eaccess()
wurden eingeführt, um die Interaktion mit dem Betriebssystem zu verbessern.
- Neue Methode in ReflectionMethod: Die Methode
ReflectionMethod::createFromMethodName()
bietet mehr Flexibilität bei der Reflexion von Methoden.
- Aktualisierte Socket-Funktionen: Die Funktion
socket_atmark()
erweitert die Netzwerkfähigkeiten.
- Neue Funktionen für Strings:
str_increment()
, str_decrement()
, e estream_context_set_options()
sind einige der neuen Funktionen, die für die Manipulation von Zeichenketten eingeführt wurden.
- Neue Methode in ZipArchive:
ZipArchiv::getArchiveFlag()
bietet neue Möglichkeiten für die Verwaltung von ZIP-Archiven.
- Neue INI-Einstellung: La
zend.max_allowed_stack_size
ermöglicht die Konfiguration der maximalen Stapelgröße und verbessert so die Ressourcenverwaltung.
Verwerfungen in PHP 8.3
Jede neue Version von PHP bringt auch eine Liste von Funktionen und Einstellungen mit sich, die veraltet sind. Diese Verwerfungen sind wichtig zu beachten, da die weitere Verwendung solcher Funktionen zu Warnungen in den Protokollen und möglichen Kompatibilitätsproblemen führen kann.
Zu den Verwerfungen in PHP 8.3 gehören:
- Die Korrektur der Konstante
U_MULTIPLE_DECIMAL_SEPERATORS
unter U_MULTIPLE_DECIMAL_SEPARATORS
.
- Die Verwerfung der Variante
3MT_RAND_PHP Mt19937
.
- Änderungen im
ReflectionClass::getStaticProperties()
.
- Verschiedene INI-Einstellungen wie
assert.active
, assert.bail
usw., sind veraltet.
- Anrufe ohne Argumente an
get_class()
e get_parent_class()
sind jetzt veraltet.
PHP 8.3 verfügbar bei G Tech Group
Zusammenfassend lässt sich sagen, dass PHP 8.3 einen bedeutenden Schritt in der Entwicklung der Sprache darstellt und eine Reihe neuer Funktionen, Verbesserungen und Ausmusterungen einführt, die für die Modernisierung und Optimierung von PHP-Code entscheidend sind. Mit der Hinzufügung von fortschrittlicheren Methoden, größerer Flexibilität und der Einführung neuer Funktionen ist PHP 8.3 eine ausgezeichnete Wahl für Entwickler, die die Leistung und Sicherheit ihrer Anwendungen verbessern wollen.
Für diejenigen, die Hosting- und Serverdienste nutzen, haben wir gute Nachrichten: G Tech Gruppe hat PHP 8.3 bereits auf allen ihren Hosting-Systemen und Servern implementiert. Das bedeutet, dass Sie als Kunde der G Tech Gruppe sofort von allen Vorteilen der neuesten PHP-Version profitieren können, ohne dass manuelle Updates oder komplexe Konfigurationen erforderlich sind.
Diese Implementierung ist Teil des Engagements der G Tech Gruppe, ihren Kunden die fortschrittlichsten und aktuellsten Technologien zur Verfügung zu stellen, um sicherzustellen, dass Ihre Projekte immer von den besten und neuesten Lösungen auf dem Markt unterstützt werden. Mit PHP 8.3 auf G Tech Group können Sie eine robuste, sichere und leistungsstarke Hosting-Umgebung erwarten, die ideal für die Entwicklung und das Wachstum Ihrer Webanwendungen ist.