Website-Symbol G Tech Gruppe

PHP 8.3: Was ist neu und was ändert sich in der neuesten Version?

PHP 8.3 Code-Screenshot und neue Funktionen.

php 8.3 scopriamo tutte le novità

PHP 8.3, rilasciato il 23 novembre, ha introdotto notevoli novità e miglioramenti rispetto alla sua versione precedente, PHP 8.2. Questa versione, pur essendo considerata “minore”, porta con sé cambiamenti significativi che possono impattare notevolmente sullo sviluppo PHP. Scopriamo insieme le principali novità e gli aggiornamenti di PHP 8.3.

Neue Funktionen und Erweiterungen in PHP 8.3 Mit PHP 8.3 wurden mehrere neue Funktionen und Verbesserungen eingeführt:

Typisierte Klassenkonstanten in PHP 8.3: Eine Programmierrevolution

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.

La nuova versione estende la tipizzazione alle costanti di classe, includendo anche quelle in interfacce, trait ed enum. Questa modifica ha l’importante vantaggio di minimizzare il rischio che gli sviluppatori si discostino dall’intento originale di una costante, garantendo maggiore chiarezza e sicurezza nel codice.

Zur Veranschaulichung hier ein praktisches Beispiel:

// Richtig:
Schnittstelle ConstTest {
const string VERSION = "PHP 8.3"; // Typ und Wert sind beide Strings
}

// Falsch:
Schnittstelle ConstTest {
const float VERSION = "PHP 8.3"; // Typ und Wert stimmen nicht überein
}

L’efficacia delle costanti di classe tipizzate diventa evidente quando si lavora con classi derivate. Nelle versioni precedenti, una sotto-classe poteva cambiare il valore di una costante, ma con PHP 8.3, ora è possibile prevenire cambiamenti accidentali del tipo di una costante, preservando la coerenza con la dichiarazione originale.

Zum Beispiel:

Klasse ConstTest {
const string VERSION = 'PHP 8.2';
}

class MyConstTest extends ConstTest {
// Richtig: Die Änderung des Werts von VERSION ist zulässig.
const string VERSION = 'PHP 8.3';

// Falsch: der Typ muss wie in der Basisklasse deklariert werden
const VERSION = 'PHP 8.3';

// Falsch: es ist nicht möglich, den in der Basisklasse deklarierten Typ zu ändern
const float VERSION = 8.3;
}

Da notare che è possibile “restringere” il tipo di una costante di classe in una sottoclasse, utilizzando un tipo compatibile o più specifico:

Klasse ConstTest {
const string|float VERSION = 'PHP 8.2';
}

class MyConstTest extends ConstTest {
// Richtig: Es ist möglich, den Typ als String oder Float anzugeben.
const string VERSION = 'PHP 8.3';
const float VERSION = 8.3;

// Richtig: obwohl der Wert ein int sein könnte, ist er mit float kompatibel
const float VERSION = 8;

// Falsch: es ist nicht möglich, die Typoptionen durch Einfügen von int zu erweitern
const string|float|int VERSION = 8;
}

Es ist jedoch wichtig zu wissen, dass es zwei Arten gibt, ungültig e niemalsweit verbreitet für die Eigenschaften und

Rückgabewerte, werden derzeit nicht als Typen für Klassenkonstanten in PHP 8.3 unterstützt.

In sintesi, la tipizzazione delle costanti di classe in PHP 8.3 rappresenta un salto di qualità nello sviluppo software. Fornisce ai programmatori uno strumento aggiuntivo per garantire che il codice sia non solo funzionale, ma anche preciso e fedele alle intenzioni originali, riducendo errori e migliorando la leggibilità e la manutenibilità del codice. Questa novità segna un’ulteriore evoluzione della tipizzazione in PHP, consolidando la sua posizione come linguaggio di programmazione moderno e robusto.

Neue Funktion in PHP 8.3: json_validate()

Die Manipulation von in JSON kodierte Daten è una pratica comune nello Web-Entwicklung. In PHP 8.3, una nuova funzione, 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() per controllare gli errori durante la conversione dei dati JSON in array associativi o oggetti. Tuttavia, questo metodo richiedeva l’uso di risorse significative per costruire le strutture di array o oggetti, anche quando il solo scopo era la verifica dell’integrità del JSON.

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.

Con l’arrivo di PHP 8.3, è possibile eseguire la stessa operazione in modo più efficiente utilizzando 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(), in quanto ciò impiegherebbe comunque le risorse di memoria per la decodifica. L’approccio ideale è utilizzare json_validate() per confermare la validità del JSON prima di procedere con ulteriori operazioni, come il salvataggio del dato o la sua trasmissione come risposta a una richiesta. In questo modo, si ottimizza l’uso delle risorse e si garantisce un trattamento più efficiente dei dati JSON.

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.

Il problema affrontato era la rigidità nell’utilizzo di classi con proprietà readonly, che limitava alcune possibilità di programmazione. La RFC ha proposto due soluzioni principali:

  1. Permettere l’estensione di classi non-readonly da classi readonly.
  2. 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. Questa nuova funzionalità permette che, durante il deep cloning, le istanze di una classe con proprietà readonly possano essere reinizializzate all’interno del 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;

Questa novità aumenta significativamente la flessibilità nell’utilizzo di classi con proprietà readonly, permettendo di utilizzare pattern di progettazione più avanzati e sofisticati, pur mantenendo l’integrità e la sicurezza che le proprietà readonly offrono.

Einführung in das neue Attribut #[\Override] in PHP 8.3

PHP 8.3 ha introdotto un’importante novità che migliora significativamente la chiarezza e la precisione del codice: l’attributo #[\Override]. Questo nuovo attributo è fondamentale quando si lavora con l’ereditarietà e le interfacce in PHP, in quanto fornisce una conferma esplicita che un metodo in una classe figlia è destinato a sovrascrivere un metodo nella classe genitore o a implementare un metodo definito in un’interfaccia.

Das Problem wurde von #[\Override] gelöst: Nella programmazione, può capitare che un metodo in una classe derivata sia scritto con l’intento di sovrascrivere un metodo della classe genitore o di implementare un metodo di un’interfaccia. Tuttavia, errori come refusi nel nome del metodo possono far sì che il metodo non sovrascriva effettivamente quello previsto, portando a comportamenti imprevisti e difficili da individuare.

So funktioniert #[\Override]: L’attributo #[\Override] serve a garantire che il metodo in una classe derivata sia effettivamente una sovrascrittura di un metodo della classe genitore o un’implementazione di un metodo di un’interfaccia. Se un metodo contrassegnato con #[\Override] non corrisponde a un metodo nella classe genitore o nell’interfaccia, PHP genererà un errore, rendendo immediatamente evidente il problema.

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

Queste innovazioni in PHP 8.3, sia l’attributo #[\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(). Questo metodo, aggiunto all’estensione Random di PHP, semplifica notevolmente la creazione di stringhe randomizzate da un set di caratteri predefiniti.

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'.

Ponderazione dei Caratteri nell’Input: Un’altra caratteristica distintiva di questo metodo è la possibilità di “pesare” i caratteri nell’input. Se alcuni caratteri compaiono più frequentemente nella stringa di input, avranno maggiori probabilità di essere selezionati nella stringa casuale. Per esempio:

$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 offre una soluzione semplice ed efficace per la generazione di stringhe casuali, con la flessibilità di personalizzare la distribuzione dei caratteri e la lunghezza della stringa risultante. Questo lo rende uno strumento prezioso per una varietà di applicazioni, dall’elaborazione di dati alla sicurezza informatica.

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.

  1. 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.
  2. 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.
  3. Aktualisierte LDAP-Funktionen: Die neuen Funktionen ldap_connect_wallet() e ldap_exop_sync() die Möglichkeiten der LDAP-Integration zu erweitern.
  4. Verbesserungen bei Multibyte-Funktionen: Die neue Funktion mb_str_pad() fügt weitere Optionen für die Manipulation von Multi-Byte-Strings hinzu.
  5. Neue POSIX-Funktionen: Funktionen wie posix_sysconf() e posix_eaccess() sono state introdotte per migliorare l’interazione con il sistema operativo.
  6. Neue Methode in ReflectionMethod: Die Methode ReflectionMethod::createFromMethodName() bietet mehr Flexibilität bei der Reflexion von Methoden.
  7. Aktualisierte Socket-Funktionen: Die Funktion socket_atmark() erweitert die Netzwerkfähigkeiten.
  8. 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.
  9. Neue Methode in ZipArchive: ZipArchiv::getArchiveFlag() bietet neue Möglichkeiten für die Verwaltung von ZIP-Archiven.
  10. 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

Ogni nuova versione di PHP porta con sé anche un elenco di funzioni e impostazioni che vengono deprecate. Queste deprecazioni sono importanti da notare, in quanto l’uso continuato di tali funzioni può portare a warning nei log e potenziali problemi di compatibilità.

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.bailusw., sind veraltet.
  • Anrufe ohne Argumente an get_class() e get_parent_class() sind jetzt veraltet.

PHP 8.3 verfügbar bei G Tech Group

In conclusione, PHP 8.3 rappresenta un significativo passo avanti nello sviluppo del linguaggio, introducendo una serie di nuove funzionalità, miglioramenti e deprecazioni che sono cruciali per modernizzare e ottimizzare il codice PHP. Con l’aggiunta di metodi più avanzati, una maggiore flessibilità e l’introduzione di nuove funzioni, PHP 8.3 si posiziona come una scelta eccellente per gli sviluppatori che cercano di migliorare le prestazioni e la sicurezza delle loro applicazioni.

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.

Questa implementazione è parte dell’impegno di G Tech Group nel fornire le tecnologie più avanzate e aggiornate ai suoi clienti, assicurando che i vostri progetti siano sempre supportati dalle migliori e più recenti soluzioni disponibili sul mercato. Con PHP 8.3 su G Tech Group, potete aspettarvi un ambiente di hosting robusto, sicuro e performante, ideale per sviluppare e far crescere le vostre applicazioni web.

Die mobile Version verlassen