Neue Features

Nullable-Typen

Die Typen für Parameter und Rückgabewerte können nun durch ein vorangestelltes Fragezeichen als nullable gekennzeichnet werden. Das bedeutet, dass neben dem angegebenen Typ auch null als Parameter übergeben bzw. als Wert zurückgegeben werden kann.

<?php

function testReturn(): ?string
{
    return 
'elePHPant';
}

var_dump(testReturn());

function 
testReturn(): ?string
{
    return 
null;
}

var_dump(testReturn());

function 
test(?string $name)
{
    
var_dump($name);
}

test('elePHPant');
test(null);
test();

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(10) "elePHPant"
NULL
string(10) "elePHPant"
NULL
Uncaught Error: Too few arguments to function test(), 0 passed in...

Void-Funktionen

Der Rückgabetyp void wurde eingeführt. Funktionen, die mit void als Rückgabetyp deklariert sind, müssen ihre return-Anweisung entweder ganz weglassen, oder eine leere return-Anweisung verwenden. null ist für eine void-Funktion kein gültiger Rückgabewert.

<?php
function swap(&$left, &$right): void
{
    if (
$left === $right) {
        return;
    }

    
$tmp $left;
    
$left $right;
    
$right $tmp;
}

$a 1;
$b 2;
var_dump(swap($a$b), $a$b);

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

null
int(2)
int(1)

Wenn versucht wird, den Rückgabewert einer void-Funktion zu verwenden, wird dieser einfach als null ausgewertet, ohne dass eine Warnung ausgegeben wird. Der Grund dafür ist, dass Warnungen die Verwendung übergeordneter generischer Funktionen zur Folge hätte.

Symmetrische Destrukturierung (Zerlegung) von Arrays

Die verkürzte Array-Syntax ([]) kann nun als Alternative zur bestehenden list()-Syntax verwendet werden, um Arrays für Zuweisungen zu zerlegen (auch innerhalb von foreach).

<?php
$data 
= [
    [
1'Tom'],
    [
2'Fred'],
];

// list()-Format
list($id1$name1) = $data[0];

// []-Format
[$id1$name1] = $data[0];

// list()-Format
foreach ($data as list($id$name)) {
    
// der Code mit $id und $name
}

// []-Format
foreach ($data as [$id$name]) {
    
// der Code mit $id und $name
}

Sichtbarkeit von Klassenkonstanten

Es ist nun möglich, den Geltungsbereich von Klassenkonstanten zu definieren.

<?php
class ConstDemo
{
    const 
PUBLIC_CONST_A 1;
    public const 
PUBLIC_CONST_B 2;
    protected const 
PROTECTED_CONST 3;
    private const 
PRIVATE_CONST 4;
}

Der Pseudo-Typ iterable

Ein neuer Pseudo-Typ (analog zu callable) namens iterable wurde eingeführt. Er kann als Typ für Parameter und Rückgabe verwendet werden, wo er entweder Arrays oder Objekte akzeptiert, die die Schnittstelle Traversable implementieren. Bei abgeleiteten Typen kann der Parametertyp einer Kindklasse die Typen array und Traversable der Elternklasse auf iterable erweitern. Bei den Rückgabetypen kann eine Kindklasse den Rückgabetyp iterable der Elternklasse einschränken auf array oder ein Objekt, das Traversable implementiert.

<?php
function iterator(iterable $iter)
{
    foreach (
$iter as $val) {
        
//
    
}
}

Behandlung mehrerer Exceptions in einem Catch-Block

Ein catch-Block kann nun mehrere Exceptions abfangen, indem er sie durch Pipe-Zeichen (|) getrennt auflistet. Dies kann nützlich sein, wenn verschiedene Exceptions verschiedener Klassenebenen auf dieselbe Weise behandelt werden sollen.

<?php
try {
    
// etwas Code
} catch (FirstException SecondException $e) {
    
// beide Exceptions behandeln
}

Unterstützung für Schlüssel in list()

Es ist nun möglich, Schlüssel mit list() oder mit der neuen verkürzten []-Syntax anzugeben. Damit lassen sich Arrays mit nicht-ganzzahligen oder nicht-sequenziellen Schlüsseln zerlegen.

<?php
$data 
= [
    [
"id" => 1"name" => 'Tom'],
    [
"id" => 2"name" => 'Fred'],
];

// list()-Format
list("id" => $id1"name" => $name1) = $data[0];

// []-Format
["id" => $id1"name" => $name1] = $data[0];

// list()-Format
foreach ($data as list("id" => $id"name" => $name)) {
    
// der Code mit $id und $name
}

// []-Format
foreach ($data as ["id" => $id"name" => $name]) {
    
// der Code mit $id und $name
}

Unterstützung für negative Zeichenketten-Offsets

Bei den Funktionen für die Manipulation von Zeichenketten, die Offsets akzeptieren, können nun negative Zeichenketten-Offsets verwendet werden. Dies gilt auch für die Indizierung von Zeichenketten mit [] oder {}. In solchen Fällen wird ein negativer Offset als Offset relativ zum Ende der Zeichenkette interpretiert.

<?php
var_dump
("abcdef"[-2]);
var_dump(strpos("aabbcc""b", -3));

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string (1) "e"
int(3)

Negative Zeichenketten- und Array-Offsets können nun auch in der einfachen Syntax zum Analysieren von Variablen innerhalb von Zeichenketten verwendet werden.

<?php
$string 
'bar';
echo 
"Das letzte Zeichen von '$string' ist '$string[-1]'.\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Das letzte Zeichen von 'bar' ist 'r'.

Unterstützung für AEAD in ext/openssl

Durch Erweiterung der Funktionen openssl_encrypt() und openssl_decrypt() um zusätzliche Parameter wird nun AEAD (die Modi GCM und CCM) unterstützt.

Callables mit Closure::fromCallable() in Closures umwandeln

Der Klasse Closure wurde eine neue statische Methode hinzugefügt, mit der Callables einfach in Closure-Objekte umgewandelt werden können.

<?php
class Test
{
    public function 
exposeFunction()
    {
        return 
Closure::fromCallable([$this'privateFunction']);
    }

    private function 
privateFunction($param)
    {
        
var_dump($param);
    }
}

$privFunc = (new Test)->exposeFunction();
$privFunc('irgendein Wert');

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

string(10) "irgendein Wert"

Asynchrone Signalverarbeitung

Eine neue Funktion namens pcntl_async_signals() wurde eingeführt, um eine asynchrone Signalverarbeitung ohne Verwendung von Ticks (die eine Menge zusätzliche Rechenzeit verursachen) zu ermöglichen.

<?php
pcntl_async_signals
(true); // asynchrone Signale einschalten

pcntl_signal(SIGHUP,  function($sig) {
    echo 
"SIGHUP\n";
});

posix_kill(posix_getpid(), SIGHUP);

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

SIGHUP

Unterstützung für HTTP/2-Server-Push in ext/curl

Die Erweiterung CURL unterstützt nun "Server-Push" (erfordert Version 7.46 und höher). Dies kann durch die Funktion curl_multi_setopt() mit der neuen Konstante CURLMOPT_PUSHFUNCTION genutzt werden. Die Konstanten CURL_PUSH_OK und CURL_PUSH_DENY wurden ebenfalls hinzugefügt, damit die Ausführung des Server-Push-Callbacks entweder genehmigt oder verweigert werden kann.

Optionen für den Stream-Kontext

Die Stream-Kontext-Option tcp_nodelay wurde hinzugefügt.

Hier Kannst Du einen Kommentar verfassen


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

Neuigkeiten für PHP-Entwickler: Laravel 11 Veröffentlichung

Am 12. März 2024 wurde die lang erwartete Version 11 des Laravel-Frameworks veröffentlicht, die eine Reihe von spannenden Neuerungen und Verbesserungen für die PHP-Entwicklungsgemeinschaft mit sich bringt. ...

Mike94

Autor : Mike94
Kategorie: PHP Magazin

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

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

Seltsames Verhalten von execute() oder Fehler meinerseits

Hallo liebe Community, ich habe ein kleines Problem und vielleicht kann mir ja jemand helfen, würde ich mich sehr drüber freuen. Unten steht e ...

Geschrieben von garibaldiwz am 22.03.2024 13:03:12
Forum: SQL / Datenbanken
Google reCAPTCHA in Kontaktformular einbinden

Überprüfen Sie den E-Mail-Versand: Stellen Sie sicher, dass die E-Mail-Funktion mail() ordnungsgemäß funktioniert und dass keine Fehler beim V ...

Geschrieben von Gast am 18.03.2024 04:54:16
Forum: PHP Developer Forum
`count.php`

Hallo cober93327, und Danke fuer deine Antwort! :-) Naja, so einen "Besucherzähler" auf der Webseite anzuzeigen ist schon eher etwas, das man a ...

Geschrieben von kekse1 am 17.03.2024 15:56:38
Forum: Projekthilfe
`count.php`

Es gibt dazu natuerlich auch eine recht ausfuehrliche Dokumentation in meinem GitHub-Repository Es würde meiner Ansicht nach enorm helfen, wenn D ...

Geschrieben von cober93327 am 14.03.2024 15:49:28
Forum: Projekthilfe