PHP ist eine Skriptsprache, die von einer großen Anzahl von Benutzern für Webentwicklungszwecke verwendet wird. Die neueste stabile und aktualisierte Version von PHP, 8.3, wurde am 23.11.2023 veröffentlicht. Seit der Veröffentlichung von PHP 3.x im Jahr 2000 gab es viele Innovationen und Änderungen. PHP gehört immer noch zu den beliebtesten Webentwicklungssprachen (Webdesign), die von einem sehr großen Publikum verwendet werden. In diesem Artikel werden wir die Neuerungen und Änderungen in PHP 8.3 anhand von Codebeispielen untersuchen und analysieren.
PHP 8.3 Wichtige neue Funktionen und Verbesserungen
Im Vergleich zur vorherigen PHP-Version PHP 8.2 gibt es in PHP 8.3 viele wesentliche Neuerungen und Verbesserungen. Gleichzeitig wurden einige Funktionen veraltet. Wir werden nun die Neuerungen und Verbesserungen einzeln anhand von Codebeispielen untersuchen.
Typisierte Klassenkonstanten
Die Typdeklaration ist für Entwickler eine sehr wichtige Funktion, die die Stabilität erhöht und die Fehlerquote bei der Webentwicklung verringert. Die Funktion zur Typdeklaration für Eigenschaften in einer Klasse wurde in PHP 7.4 hinzugefügt. Obwohl in späteren Versionen viele Verbesserungen an dieser Funktion vorgenommen wurden, war diese Funktion für Konstanten in der Klasse immer noch nicht verfügbar. Mit PHP 8.3 ist es nun möglich, Typen für Konstanten in Klassen zu deklarieren.
// Doğru kullanım:
class MyClass {
// Bildirilen tür ve değer aynı
const string VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür ile değer farklı
const int VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür sınıf sabitleri için desteklenmiyor
const void VERSION = "PHP 8.3"; // değer string
}Einige Typdeklarationen werden für Klassenkonstanten nicht unterstützt.
Nicht unterstützte Typdeklarationen für Klassenkonstanten: void, callable, never
Eine neue Funktion: json_validate()
Wenn wir mit Daten im JSON-Format (json-codierte Daten) arbeiten, müssen wir vor der Verwendung der Daten überprüfen, ob die eingehenden Daten gültig sind. Wir haben dies in Versionen vor PHP 8.3 mit den folgenden oder ähnlichen Methoden durchgeführt.
// PHP 8.3'ten önceki sürümlerde JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_last_error() === JSON_ERROR_NONE) {
// $data ile gerçekleştirilecek işlemler
}In diesem alten Beispiel kann PHP bei der Validierung von JSON-Daten abhängig von der Datengröße erheblich Speicher verbrauchen. In PHP 8.3 wurde eine neue PHP-Funktion hinzugefügt, die eine leistungsorientierte schnelle Lösung erstellt: json_validate(). Nachfolgend haben wir das Nutzungsszenario dieser Funktion beispielhaft dargestellt.
// PHP 8.3'te JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_validate($maybeJSON)) {
// $data ile gerçekleştirilecek işlemler
}Eine neue Funktion: #[Override]
Bei der Implementierung von Schnittstellen in PHP stellen wir detaillierte Funktionalitäten für die Methoden in der Schnittstelle bereit. Beim Erstellen einer Instanz einer Klasse können wir eine übergeordnete Methode überschreiben, indem wir eine alternative Version mit demselben Namen und einer kompatiblen Signatur erstellen. Dies kann zu erheblichen Problemen in der Software führen. Kurz gesagt besteht das Problem darin, dass wir glauben, die Hauptmethode aufgrund eines kleinen übersehenen Tippfehlers überschrieben zu haben.
Die #[Override]-Funktion von PHP 8.3 bietet eine Lösung für dieses Problem. Sehen wir uns das nun im Beispiel an.
class A {
protected function myOverrideFunc(): void {}
// Doğru kullanım
// Bu örnek çalışacak
// Üstteki sınıfta ilgili method var ve geçersiz kılındı
class B extends A {
#[\Override]
public function myOverrideFunc(): void {}
// Hatalı kullanım
// Bu örnek çalışmayacak, çünkü ana sınıfta method yok
// Muhtemelen gözden kaçan bir yazım hatası
class C extends A {
#[\Override]
public function myOverrideFunction(): void {}
}Deep Cloning von schreibgeschützten Eigenschaften
PHP führte in PHP 8.1 die Möglichkeit ein, einzelne Klasseneigenschaften als schreibgeschützt zu deklarieren und sie in PHP 8.2 der gesamten Klasse zuzuweisen. Die meisten Webentwickler waren jedoch der Meinung, dass die Einschränkungen bei der Arbeit mit Klassen, die solche Funktionen enthalten, die Praktikabilität der Programmierlogik verhinderten.
Um dies zu ändern RFC Es wurden zwei Hauptempfehlungen ausgesprochen:
schreibgeschützt
readonlyZulassen von Klassen, die nicht erweitert werden dürfenreadonlyErmöglicht den Neustart von Funktionen während des Klonens
Der zweite Vorschlag war in PHP 8.3 enthalten. Dieser neue Ansatz wurde zu PHP 8.3 hinzugefügt readonly Instanzen einer Klasse mit Eigenschaftenreadonly Eigenschaften) __clone Es ermöglicht einen Neustart mit seiner magischen Methode.
Dieses Codebeispiel aus dem RFC kann uns helfen zu verstehen, wie diese neue Methode funktioniert:
Dynamisches Abrufen von Klassenkonstanten und Enum-Mitgliedern
Im Gegensatz zu anderen Funktionen in PHP ist das Erfassen von Klassenkonstanten und Enum-Mitgliedern mit Variablennamen etwas komplizierter. Vor PHP 8.3 konnten wir dies wie im folgenden Beispiel tun:
class Foo {
public function __construct(
public readonly DateTime $bar,
public readonly DateTime $baz
) {}
public function __clone() {
// Klon çağrıldığında $bar yeni bir DateTime alacak
$this->bar = clone $this->bar;
// Ardından bu metod çağrılacak
$this->cloneBaz();
}
private function cloneBaz() {
// Bu __clone içinden çağrıldığından dolayı doğru bir kullanımdır
unset($this->baz);
}
}
$foo = new Foo(new DateTime(), new DateTime());
$foo2 = clone $foo;class MyClass {
public const THE_CONST = 9;
}
enum MyEnum: int {
case FirstMember = 9;
case SecondMember = 10;
}
$constantName = 'THE_CONST';
$memberName = 'FirstMember';
echo constant('MyClass::' . $constantName);
echo constant('MyEnum::' . #memberName)->value;Lassen Sie uns nun die Werte mithilfe der Klassen- und Enum-Definitionen im obigen Beispiel in PHP 8.3 ermitteln:
$constantName = 'THE_CONST';
$memberName = 'FirstNumber';
echo MyClass::{$constantName};
echo MyEnum::{$memberName}->value;Eine neue Methode: getBytesFromString()
Wir können sagen, dass diese Methode die unerwartetste unter den in PHP 8.3 hinzugefügten Funktionen war: Generieren von zufälligem Text mithilfe einer vorab genehmigten Sammlung von Zeichen.
Diese neue Methode ist sehr einfach und klar. Wir geben der Methode einige Zeichen als Ressourcen und geben an, wie viele davon wir verwenden möchten. Das ist alles! Jetzt gibt unsere Methode Ergebnisse mit zufälligen Zeichen zurück, bis sie die angegebene Länge erreicht. Lassen Sie uns dies nun anhand eines Beispiels verdeutlichen
$generateRandomString = new Random\Randomizer();
$allowedChars = 'ABCDEFGHJKMNPQRSTVWXYZ';
$generateRandomString->getBytesFromString($allowedChars, 6) // "MBDSFD" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 6) // "DJSDKA" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 4) // "SDLA" - rastgele gelen veriEs ist möglich, dass die Ausgabe länger ist als die Gesamtlänge der von uns angegebenen Zeichen. Wir haben dies im folgenden Beispiel getan:
$generateRandomString = new Random\Randomizer();
$allowedChars = '123456';
$generateRandomString->getBytesFromString($allowedChars, 8) // "47384252" - rastgele gelen veriWenn alle Zeichen, die wir als Parameter angeben, unterschiedlich sind, ist die Wahrscheinlichkeit, welches ausgewählt wird, gleich. Wir können jedoch dafür sorgen, dass mehr gleiche Zeichen in der Ausgabe erscheinen, indem wir mehr als ein gleiches Zeichen zu unserer unterstützten Zeichenliste hinzufügen. Wir haben dies im nächsten Beispiel gezeigt.
$generateRandomString = new Random\Randomizer();
$allowedChars = 'AAAAA12345';
$generateRandomString->getBytesFromString($allowedChars, 5) // "4AA12" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 8) // "38A19AA5" - rastgele gelen veriNeue Methoden: getFloat() und nextFloat()
In dieser Innovation führt PHP 8.3 zwei neue Methoden ein, die die Zufallserweiterung von PHP erweitern: getFloat() und nextFloat().
Ein Beispiel für diese Methoden:
$generateRandomNumber = new Random\Randomizer();
// Rastgele ondalıklı (float) bir rakam oluştur
// Değer 0 ile 5 arasında olsun
$generateRandomNumber->getFloat(0,5); // 2.483929 - rastgele gelen veri
// 0 ile 1 arasında rastgele ondalıklı bir rakam oluştur
$generateRandomNumber->nextFloat(); // 0.4828258 rastgele gelen veriKleinere Neuerungen und Verbesserungen in PHP 8.3
Zusätzlich zu den oben genannten Neuerungen verfügt PHP 8.3 über Dutzende weiterer kleinerer Verbesserungen und Neuerungen. Wir haben sie zusammen mit ihren Quelldokumenten in der folgenden Liste aufgeführt.
- Neue Methoden für die DOMElement-Klasse:
DOMElement::getAttributeNames(),DOMElement::insertAdjacentElement(),DOMElement::insertAdjacentText(),DOMElement::toggleAttribute(),DOMNode::contains(),DOMNode::getRootNode(),DOMNode::isEqualNode()DOMNameSpaceNode::contains() undMParentNode::replaceChildren(). - Neue Methoden für die IntlCalendar-Klasse:
IntlCalendar::setDate(),IntlCalendar::setDateTime(),IntlGregorianCalendar::createFromDate()undIntlGregorianCalendar::createFromDateTime(). - Neue LDAP-Funktionen: ldap_connect_wallet() und ldap_exop_sync().
- neu
mb_str_pad()Multibyte-String-Funktion (Multibyte-String-Funktion). - Neue POSIX-Funktionen:
posix_sysconf(),posix_pathconf(),posix_fpathconf()undposix_eaccess(). - Neue Methode:
ReflectionMethod::createFromMethodName() - Neue Socket-Funktion:
socket_atmark(). - Neue String-(Text-)Funktionen:
str_increment(),str_decrement(), undstream_context_set_options(). - Neue ZipArchive-Klassenmethode:
ZipArchive::getArchiveFlag(). - Neue php.ini-Einstellung zum Festlegen der maximal zulässigen Stack-Größe:
zend.max_allowed_stack_size.
In PHP 8.3 veraltet
Mit jeder neuen PHP-Version wird ein Teil des Codes als veraltet markiert. Es wird niemals empfohlen, diese Funktionen zu verwenden, wenn sie vollständig veraltet sind. Wenn veralteter Code verwendet wird, wird bei der Ausführung des Codes eine Fehlermeldung zurückgegeben.
Liste der veralteten Versionen von PHP 8.3:
- Die Konstante U_MULTIPLE_DECIMAL_SEPARATORS ist veraltet.
- Mt19937
3MT_RAND_PHPDie Variante ist veraltet. ReflectionClass::getStaticProperties()kann nicht mehr nullbar sein.- PHP.ini-Einstellungen
assert.active,assert.bail,assert.callback,assert.exceptionundassert.warningist veraltet. get_class()undget_parent_class()ist veraltet.
PHP 8.3
In diesem Artikel haben wir die wichtigen Änderungen und Neuerungen in PHP 8.3 besprochen. Für eine detailliertere Liste aller Änderungen in PHP 8.3 offizielles Changelog Wir empfehlen Ihnen, es zu überprüfen. Wenn Sie Ihre Codes oder Website von PHP 8.2 auf PHP 8.3 aktualisieren möchten, kann diese Anleitung hilfreich sein: PHP 8.3 Migration Guide -> https://www.php.net/manual/en/migration83.php
Wenn Sie sich Sorgen über PHP-Versionen und Migration machen, empfehlen wir Ihnen, der neuen Version etwas Zeit für das Upgrade auf PHP 8.3 zu geben.
Vollständige Abdeckung der Sprachen PHP und JavaScript und verwandter Technologien als Onur Özden Web Çözümleri Web-Software Wir bieten Dienstleistungen an. Wenn Sie eine Frage oder ein Anliegen haben, können Sie uns schnell über den WhatsApp-Button unten links kontaktieren, um ein Angebot zu erhalten.



