PHP 8.3: Neue Funktionen und Verbesserungen
Von Robin Backnecht am 21.01.2024
PHP 8.3 ist eine neue Minor-Version der Sprache PHP. Sie wurde am 25. November 2023 veröffentlicht und enthält eine Reihe neuer Funktionen und Verbesserungen.
Neue Funktionen:
Zu den neuen Funktionen von PHP 8.3 zählen:
- Typisierung von Klassen-Konstanten: Klassen-Konstanten können nun mit einem Typ versehen werden.
- Dynamisches Abrufen von Klassen-Konstanten: Klassen-Konstanten können nun auch dynamisch abgerufen werden.
- Neue #[Override] Attribute: Das neue #[Override] Attribut kann verwendet werden, um zu kennzeichnen, dass eine Methode eine Methode einer übergeordneten Klasse überschreibt.
- Tiefe Klonierung von Readonly-Eigenschaften: Readonly-Eigenschaften können nun tief kloniert werden.
- Neue Funktionen für JSON-Validierung: Es wurden neue Funktionen für die Validierung von JSON hinzugefügt
- Neue Funktionen für die Zufallszahlengenerierung: Es wurden neue Funktionen für die Zufallszahlengenerierung hinzugefügt, darunter:
- Randomizer::getBytesFromString(): Diese Funktion kann verwendet werden, um ein Byte-Array aus einem String zu generieren.
- Randomizer::getFloat() und Randomizer::nextFloat(): Diese Funktionen können verwendet werden, um eine Gleitkommazahl zu generieren.
Verbesserungen
Die folgenden Verbesserungen wurden in PHP 8.3 vorgenommen:
- Verbesserte Leistung: Die Leistung von PHP wurde in einigen Bereichen verbessert.
- Verbesserte Sicherheit: Die Sicherheit von PHP wurde in einigen Bereichen verbessert.
- Verbesserte Kompatibilität: Die Kompatibilität von PHP mit anderen Sprachen und Frameworks wurde in einigen Bereichen verbessert.
Code-Beispiele
Hier sind einige Code-Beispiele, die die neuen Funktionen und Verbesserungen in PHP 8.3 demonstrieren:
Typisierung von Klassen-Konstanten
<?php
class TypedClassConstants
{
public const string TYPED = 'PHP 8.3 Blogartikel';
public function constant(): void
{
// Die Typisierung der Klassen-Konstante sorgt dafür,
// dass nur eine Zeichenfolge an die Methode constant() übergeben werden kann.
echo TypedClassConstants::TYPED;
}
public function constantWithWrongType(): void
{
// Fatal error: Das Argument von constant() muss vom Typ ein String sein, es wird aber ein Integer übergeben
echo TypedClassConstants::CONSTANT = 123;
}
}
$typedClassConstants = new TypedClassConstants();
$typedClassConstants->constant();
$typedClassConstants->constantWithWrongType();
// ---------------------------------------------
interface TypedClassConstantsInterface
{
public const string CONSTANT = 'PHP 8.3 Blogartikel';
}
class TypedClassConstantsImplementation implements TypedClassConstantsInterface
{
// Fatal error: Das Default Value für CONSTANT darf nur ein String sein
public const string CONSTANT = [];
}
Dynamisches Abrufen von Klassen-Konstanten
<?php
class DynamicClassConstantFetch
{
public const string CONSTANT = 'PHP 8.3 Blogartikel';
public function constant(): void
{
// Das dynamische Abrufen von Klassen-Konstanten kann dazu beitragen,
// den Code zu vereinfachen.
echo DynamicClassConstantFetch::CONSTANT;
}
}
$searchableConstant = 'CONSTANT';
$dynamicClassConstantFetch = new DynamicClassConstantFetch();
$dynamicClassConstantFetch->constant();
//---------------------------------------------
echo DynamicClassConstantFetch::{$searchableConstant};
Neue #[Override] Attribute
<?php
class ParentClass
{
public function parent(): void
{
echo "I am the string from the parent class";
}
}
class ChildClass extends ParentClass
{
#[Override]
public function parent(): void
{
echo "I am the string from the child class";
}
}
$child = new ChildClass();
$child->parent();
Tiefe Klonierung von Readonly-Eigenschaften
<?php
class DeepCloningReadonlyProperties
{
public string $php = 'PHP 8.3 Blogartikel';
}
readonly class ReadonlyDeepCloningReadonlyProperties
{
public function __construct(public DeepCloningReadonlyProperties $deepCloningReadonlyProperties)
{
}
public function __clone()
{
$this->deepCloningReadonlyProperties = clone $this->deepCloningReadonlyProperties;
}
}
$instance = new ReadonlyDeepCloningReadonlyProperties(new DeepCloningReadonlyProperties());
$clonedInstance = clone $instance;
echo $clonedInstance->deepCloningReadonlyProperties->php; // PHP 8.3 Blogartikel
Neue Funktionen für JSON Validierung
<?php
$jsonValidate = json_validate('{ "version": { "php": "8.3", "languange": "php" } }');
if ($jsonValidate) {
echo "Valid JSON";
} else {
echo "Invalid JSON";
}
Neue Funktionen für die Zufallszahlengenerierung
<?php
$bytes = (new Random\Randomizer)->getBytesFromString(
'abcdefghijklmnopqrstuvwxyz0123456789',
11
);
echo $bytes;
<?php
// Generiere eine Zufallszahl zwischen 0 und 1
echo (new \Random\Randomizer())->nextFloat();
// Generiere eine Zufallszahl zwischen 10 und 20, inklusive 10 und 20
echo (new \Random\Randomizer())->getFloat(10, 20);
// Generiere eine Zufallszahl zwischen 0 und 100, exklusive 100
echo (new \Random\Randomizer())->getFloat(0, 100, \Random\IntervalBoundary::OpenClosed);
// Generiere eine Zufallszahl zwischen -10 und 10, inklusive -10 und 10
echo (new \Random\Randomizer())->getFloat(-10, 10, \Random\IntervalBoundary::OpenOpen);
GitHub Repository
Wenn du dir den Code etwas genauer ansehen möchtest oder das Repository klonen möchtest, dann ist hier der Link: Zum Repository
Quellen
- https://stitcher.io/blog/new-in-php-83
- https://www.domaintechnik.at/handbuch/php-8-3.html
- https://www.php.net/releases/8.3/en.php
- https://kinsta.com/de/blog/php-8-3/
- https://www.esono.de/blog/softwareentwicklung/php-8-3-neue-php-version-ab-november-2023_aid_1140.html
- https://benjamincrozat.com/php-83
The comments are closed.