PHP_8_3_1

PHP 8.3: Neue Funktionen und Verbesserungen

Von 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

Bilder

The comments are closed.