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.

Technisches SEO bleibt relevant

Technisches SEO – Was ist das überhaupt? Technisches SEO bezieht sich auf die Optimierung der technischen Aspekte deiner Webseite. Das Ziel ist klar! ...

admin

Autor : admin
Kategorie: SEO & Online-Marketing

Was ist neu in der PHP 8.2.10

PHP 8.2.10 ist eine der neuesten Versionen von PHP, die eine Reihe von Verbesserungen und neuen Funktionen mit sich bringt. In diesem Artikel werden wir einige der herausragenden Neuerungen und Verbesserungen dieser Version diskutieren. ...

admin

Autor : admin
Kategorie: Software-Updates

Total Commander 11.00 (final) ist verfügbar!

Total Commander, ein beliebter Datei-Manager, hat kürzlich seine neueste Version, 11.00, veröffentlicht. Mit einer Vielzahl von neuen Funktionen und Korrekturen bietet diese Version den Benutzern ein verbessertes und optimiertes Erlebnis. ...

admin

Autor : admin
Kategorie: Software-Updates

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

Warning: Undefined variabl

völlig übersehen, ja der code müssste mal überrbeitet werden. mit http_client ... ect. gut zu wissen. hat sich ja doch mehr verändert als ged ...

Geschrieben von derneue1 am 20.02.2024 00:00:45
Forum: PHP Developer Forum
Warning: Undefined variabl

Ähm, die weißt schon, dass wir hier von Grundlagen reden, oder? if ($new)​ if (isset($new))​ $ers["username"] = "" . $ers["username"] . ...

Geschrieben von scatello am 19.02.2024 21:00:38
Forum: PHP Developer Forum
Warning: Undefined variabl

ok, das geht. eigentlich war das reporting vorher auch immer an, komisch. und wie sieht das hier aus ? Warning: Undefined variable $new in /var/ww ...

Geschrieben von derneue1 am 19.02.2024 18:55:03
Forum: PHP Developer Forum
Warning: Undefined variabl

ich bunutze schon lange ein script was immer funktioniert hat. Das lag aber nur daran, dass du das Error-Reporting nicht hochgedreht hast, denn da ...

Geschrieben von scatello am 19.02.2024 17:59:56
Forum: PHP Developer Forum