PHP 8.3 jetzt bei hosting.de verfügbar

PHP 8.3 jetzt bei hosting.de verfügbar

Jedes Jahr ungefähr im November wird eine neue PHP Version verföffentlicht. Ab sofort steht die neueste Version PHP 8.3 bei hosting.de allen Kunden zur Verfügung.

Mit dem Release von PHP 8.3 ändert sich nun auch etwas für die erste PHP 8 Version: PHP 8.0 erhält keine Sicherheitsupdates mehr. Kunden, die diese Version einsetzen, empfehlen wir die Umstellung auf eine neuere Version. PHP 8.0 wird bei hosting.de ab Februar 2024 in den Extended Support wechseln und steht danach nur noch kostenpflichtig zur Verfügung.

Wir möchten Euch einige Neuerungen von PHP 8.3 mit diesem Blogbeitrag näher bringen und erläutern.

Typisierte Konstanten in Klassen

Klassendefinitionen können nun typisierte Konstanten enthalten. Der Typ kann dann nicht in Implementierungen überschrieben werden.

interface I {
    const string PHP = 'PHP 8.3';
}

class Foo implements I {
    const string PHP = [];
}

// Fatal error: Cannot use array as value for class constant Foo::PHP of type string

Neues #[\Override] Attribut

Durch Hinzufügen des Attributs #[\Override] zu einer Methode stellt PHP sicher, dass eine Methode mit demselben Namen in einer übergeordneten Klasse oder in einer implementierten Schnittstelle existiert. Das Hinzufügen des Attributs macht deutlich, dass das Überschreiben einer übergeordneten Methode beabsichtigt ist, und vereinfacht das Refactoring, da das Entfernen einer überschriebenen übergeordneten Methode erkannt wird.

use PHPUnit\Framework\TestCase;

final class MyTest extends TestCase {
    protected $logFile;

    protected function setUp(): void {
        $this->logFile = fopen('/tmp/logfile', 'w');
    }

    #[\Override]
    protected function taerDown(): void {
        fclose($this->logFile);
        unlink('/tmp/logfile');
    }
}

// Fatal error: MyTest::taerDown() has #[\Override] attribute, but no matching parent method exists

Deep-Cloning von readonly Properties

readonly Properties können jetzt einmal innerhalb der magischen __clone-Methode geändert werden, um das Deep-Cloning von readonly Properties zu ermöglichen.

class PHP {
    public string $version = '8.2';
}

readonly class Foo {
    public function __construct(
        public PHP $php
    ) {}

    public function __clone(): void {
        $this->php = clone $this->php;
    }
}

$instance = new Foo(new PHP());
$cloned = clone $instance;

$cloned->php->version = '8.3';

In älteren PHP Versionen wurde an der Stelle ein Fehler geworfen, da die Property nicht überschrieben werden dürfte.

Neue json_validate() Methode

json_validate() ermöglicht die Überprüfung, ob ein String syntaktisch gültiges JSON ist, und ist dabei effizienter als json_decode().

var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true

Neue Randomizer Methoden

Die in PHP 8.2 hinzugefügte Random-Erweiterung wurde um neue Methoden erweitert. getBytesFromString() wird zur Erzeugung zufälliger Strings verwendet, die nur aus bestimmten Bytes bestehen. Diese Methode ermöglicht es dem Entwickler, auf einfache Weise zufällige Bezeichner, wie z. B. Domain-Namen, und numerische Strings beliebiger Länge zu erzeugen.

$randomizer = new \Random\Randomizer();

$randomDomain = sprintf(
    "%s.example.com",
    $randomizer->getBytesFromString(
        'abcdefghijklmnopqrstuvwxyz0123456789',
        16,
    ),
);

echo $randomDomain;

Der Randomizer wurde außerdem um zwei Methoden erweitert, um zufällige Fließkommazahlen auf unvoreingenommene Weise zu erzeugen.

$randomizer = new \Random\Randomizer();

$temperature = $randomizer->getFloat(
    -89.2,
    56.7,
    \Random\IntervalBoundary::ClosedClosed,
);

$chanceForTrue = 0.1;
// Randomizer::nextFloat() is equivalent to
// Randomizer::getFloat(0, 1, \Random\IntervalBoundary::ClosedOpen).
// The upper bound, i.e. 1, will not be returned.
$myBoolean = $randomizer->nextFloat() < $chanceForTrue;

Weitere Informationen

Daneben gibt es viele weitere Änderungen. Weitere Informationen zu PHP findest Du auch direkt bei PHP.net: https://www.php.net/releases/8.3/en.php

Hinweise, was man bei einer Umstellung auf PHP 8.3 beachten muss, liefert folgende Seite: https://www.php.net/manual/en/migration83.php
Hier werden noch einmal alle Breaking Changes sowie abgekündigten Features (deprecated) aufgelistet.

Next: Debian 12 Bookworm jetzt für Cloud Server verfügbar hosting.de Blog 23.11.2023