Neue Features

PHP-Kern

Typisierte Eigenschaften

Klasseneigenschaften unterstützen nun Typ-Deklarationen.

<?php
class User {
    public 
int $id;
    public 
string $name;
}
?>
Das obige Beispiel erzwingt, dass $user->id nur int-Werte zugewiesen werden können und $user->name nur string-Werte.

Pfeilfunktionen

Die Pfeilfunktionen bieten eine Kurzform der Syntax für die Definition von Funktionen mit impliziter Bindung an den Wertebereich.

<?php
$factor 
10;
$nums array_map(fn($n) => $n $factor, [1234]);
// $nums = array(10, 20, 30, 40);
?>

Eingeschränkte Kovarianz des Rückgabetyps und Kontravarianz des Parametertyps

Der folgende Code funktioniert nun:

<?php
class {}
class 
extends {}

class 
Producer {
    public function 
method(): {}
}
class 
ChildProducer extends Producer {
    public function 
method(): {}
}
?>
Die vollständige Unterstützung der Varianz ist nur verfügbar, wenn automatisches Laden verwendet wird. Innerhalb einer einzelnen Datei sind nur nichtzyklische Typreferenzen möglich, da alle Klassen verfügbar sein müssen, bevor sie referenziert werden.

Zuweisungsoperator für die Kombination mit null (null-Koaleszenz)

<?php
$array
['key'] ??= computeDefault();
// entspricht in etwa
if (!isset($array['key'])) {
    
$array['key'] = computeDefault();
}
?>

Entpacken innerhalb von Arrays

<?php
$parts 
= ['apple''pear'];
$fruits = ['banana''orange', ...$parts'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
?>

Trennzeichen für numerische Literale

Bei numerischen Literalen können nun Unterstriche zwischen den Ziffern eingefügt werden.

<?php
6.674_083e
-11// Gleitkommazahl
299_792_458;   // Dezimalzahl
0xCAFE_F00D;   // Hexadezimalzahl
0b0101_1111;   // Binärzahl
?>

Schwache Referenzen

Eine schwache Referenz ermöglicht es dem Programmierer, eine Referenz auf ein Objekt zu behalten, die nicht verhindert, dass das Objekt zerstört wird.

Zulassen von Exceptions aus __toString()

Bei der Methode __toString() ist es nun möglich, Exceptions auszulösen. Zuvor führte dies zu einem schwerwiegenden Fehler. Alle behebbaren schwerwiegenden Fehler bei Zeichenketten-Konvertierungen wurden in Error-Exceptions umgewandelt.

CURL

Wenn die Erweiterung mit libcurl >= 7.56.0 kompiliert wurde, unterstützt die Klasse CURLFile nun zusätzlich zu einfachen Dateinamen auch Stream-Wrapper.

Filter

Der Filter FILTER_VALIDATE_FLOAT unterstützt nun die Optionen min_range und max_range mit der gleichen Semantik wie FILTER_VALIDATE_INT.

FFI

FFI ist eine neue Erweiterung, die eine einfache Möglichkeit bietet, native Funktionen aufzurufen, auf native Variablen zuzugreifen und Datenstrukturen zu erzeugen/aufzurufen, die in C-Bibliotheken definiert sind.

GD

Der Bildfilter IMG_FILTER_SCATTER wurde hinzugefügt, um einen Streufilter auf Bilder anzuwenden.

Hash

Der crc32c-Hash, der das Castagnoli-Polynom verwendet, wurde hinzugefügt. Diese CRC32-Variante wird in Speichersystemen wie iSCSI, SCTP, Btrfs und ext4 verwendet.

Multibyte-Zeichenketten

Die Funktion mb_str_split() wurde hinzugefügt. Sie bietet die gleiche Funktionalität wie str_split(), arbeitet aber mit Codepunkten anstelle von Bytes.

OPcache

Die Unterstützung für das Vorladen von Code wurde hinzugefügt.

Reguläre Ausdrücke (Perl-kompatibel)

Die Funktionen preg_replace_callback() und preg_replace_callback_array() akzeptieren nun zusätzlich den Parameter flags, der die Flags PREG_OFFSET_CAPTURE und PREG_UNMATCHED_AS_NULL unterstützt. Dies beeinflusst das Format des Arrays für die Übereinstimmungen, das an die Callback-Funktion übergeben wird.

PDO

Bei den Treibern für mysql, mssql, dblib, firebird und oci können Benutzername und Passwort nun als Teil des PDO DSN angegeben werden. Zuvor wurde dies nur vom pgsql-Treiber unterstützt. Wenn ein Benutzername/Passwort sowohl im Konstruktor als auch im DSN angegeben wird, hat der Konstruktor Vorrang.

Es ist nun möglich, Fragezeichen in SQL-Abfragen zu maskieren, damit sie nicht als als Platzhalter für Parameter interpretiert werden. Mit ?? ist es möglich, ein einzelnes Fragezeichen an die Datenbank zu senden. Dieses kann z. B. bei PostgreSQL als ?-Operator verwendet werden, um zu prüfen, ob ein JSON-Schlüssel existiert.

PDO_OCI

Die Methode PDOStatement::getColumnMeta() ist nun verfügbar.

PDO_SQLite

PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT) ermöglicht es, zu prüfen, ob eine Anweisung nur lesend ist, d. h., ob sie die Datenbank nicht verändert.

PDO::setAttribute(PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES, true) ermöglicht in PDO::errorInfo() und PDOStatement::errorInfo() die Verwendung der erweiterten SQLite3-Ergebniscodes.

SQLite3

Die Methode SQLite3::lastExtendedErrorCode() wurde hinzugefügt, um den letzten erweiterten Ergebniscode abzurufen.

SQLite3::enableExtendedResultCodes($enable = true) wurde hinzugefügt, was dazu führt, dass SQLite3::lastErrorCode() erweiterte Ergebniscodes zurückgibt.

Standard

strip_tags() mit einem Array von Tag-Namen

Die Funktion strip_tags() akzeptiert nun auch ein Array mit erlaubten Tags: Anstelle von strip_tags($str, '<a><p>') kann nun strip_tags($str, ['a', 'p']) geschrieben werden.

Benutzerdefinierte Serialisierung von Objekten

Es wurde ein neues Verfahren für die benutzerdefinierte Serialisierung von Objekten hinzugefügt, das zwei neue magische Methoden verwendet: __serialize und __unserialize.

<?php
// Gibt ein Array zurück, das alle notwendigen Zustände des Objekts enthält.
public function __serialize(): array;

// Stellt den Objektzustand aus dem angegebenen Datenarray wieder her.
public function __unserialize(array $data): void;
?>
Das neue Serialisierungsverfahren ersetzt die Schnittstelle Serializable, die in Zukunft für veraltet erklärt werden wird.

Verwendung der array_merge-Funktionen ohne Parameter

Die Funktionen array_merge() und array_merge_recursive() können nun auch ohne Parameter aufgerufen werden und geben in diesem Fall ein leeres Array zurück. Dies ist nützlich in Verbindung mit dem Spread-Operator (Zerlegungsoperator), z. B. array_merge(...$arrays).

Die Funktion proc_open()

proc_open() akzeptiert für den Befehl nun ein Array anstelle einer Zeichenkette. In diesem Fall wird der Prozess direkt geöffnet (ohne den Umweg über eine Shell) und PHP kümmert sich bei Bedarf darum, die Parameter zu maskieren.

<?php
proc_open
(['php''-r''echo "Hello World\n";'], $descriptors$pipes);
?>

proc_open() unterstützt nun die Deskriptoren redirect und null.

<?php
// Wie 2>&1 in der Shell
proc_open($cmd, [=> ['pipe''w'], => ['redirect'1]], $pipes);
// Wie 2>/dev/null oder 2>nul in der Shell
proc_open($cmd, [=> ['pipe''w'], => ['null']], $pipes);
?>

argon2i(d) ohne libargon

Wenn PHP ohne libargon gebaut wird, hat password_hash() nun die argon2i- und argon2id-Implementierungen aus der Erweiterung Sodium.

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

PHP cURL-Tutorial: Verwendung von cURL zum Durchführen von HTTP-Anfragen

cURL ist eine leistungsstarke PHP-Erweiterung, die es Ihnen ermöglicht, mit verschiedenen Servern über verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr zu kommunizieren. ...

TheMax

Autor : TheMax
Kategorie: PHP-Tutorials

Midjourney Tutorial - Anleitung für Anfänger

Über Midjourney, dem Tool zur Erstellung digitaler Bilder mithilfe von künstlicher Intelligenz, gibt es ein informatives Video mit dem Titel "Midjourney Tutorial auf Deutsch - Anleitung für Anfänger" ...

Mike94

Autor : Mike94
Kategorie: KI Tutorials

Grundlagen von Views in MySQL

Views in einer MySQL-Datenbank bieten die Möglichkeit, eine virtuelle Tabelle basierend auf dem Ergebnis einer SQL-Abfrage zu erstellen. ...

admin

Autor : admin
Kategorie: mySQL-Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

Ein data POST via Curl funktioniert nicht.

Anmorg93 Respekt, du bist ja nur um rund 10 Jahre zu spät dran.

Geschrieben von scatello am 21.11.2024 10:57:00
Forum: PHP Developer Forum
Ein data POST via Curl funktioniert nicht.

Hey, hatte auch mal das Problem. Oft liegt’s an fehlenden oder falschen Headern. Probier mal:​ $ch = curl_init(); curl_setopt($ch, CURLOPT_UR ...

Geschrieben von Anmorg93 am 21.11.2024 10:48:17
Forum: PHP Developer Forum
Probleme mit einem Linux-Befehl...

guten Tag liebe Community ;) hallo liebe Freunde auf der php-Ressource, hoffe, das landet im richtigen Unterforum also, womit ich im Moment zu ...

Geschrieben von dhubs am 15.11.2024 16:21:52
Forum: Off-Topic Diskussionen
ein .htaccess-File für eine WordPress-Installation - wie gehe ich hier vor.?

hallo und guten Tag, wie lege ich denn einen .htaccess für eine WordPress-Installation an - wie gehe ich hier vor. Kann man das denn so mache ...

Geschrieben von dhubs am 13.11.2024 15:52:54
Forum: Webmaster