Hier sind einige möglicherweise weniger verbreitete PHP-Funktionen und -Operatoren, die nützlich sein können.
Der Spaceship-Operator <=>
vereint Vergleichsfunktionen in einem Operator.
Er liefert:
0
, wenn beide Seiten gleich sind.-1
, wenn die linke Seite kleiner als die rechte Seite ist.1
, wenn die linke Seite größer als die rechte Seite ist.// Vergleich von Integern
echo 1 <=> 1; // Ausgabe: 0
echo 3 <=> 4; // Ausgabe: -1
echo 4 <=> 3; // Ausgabe: 1
// Vergleich von Strings
echo "a" <=> "a"; // Ausgabe: 0
echo "a" <=> "b"; // Ausgabe: -1
echo "b" <=> "a"; // Ausgabe: 1
Der match
-Ausdruck in PHP ist ähnlich wie der switch
-Ausdruck, unterscheidet sich jedoch in einigen wichtigen Punkten. Während switch
eine Kontrollstruktur ist, die verschiedene Fälle durchläuft und Anweisungen ausführt, führt match
eine direkte Zuweisung durch und gibt einen Wert zurück. Dies macht match
besonders nützlich für Fälle, in denen eine Variable basierend auf einem Ausdruck zugewiesen werden soll.
$status = 200;
$result = match ($status) {
200, 201 => 'Success',
400 => 'Bad Request',
500 => 'Server Error',
default => 'Unknown Status'
};
echo $result; // Ausgabe: Success
match
-Ausdrücke sind oft kürzer und klarer als entsprechende switch
-Anweisungen.match
eine direkte Zuweisung durchführt, kann es in bestimmten Fällen effizienter sein als switch
.Generator-Funktionen sind eine leistungsstarke Möglichkeit, um mit großen Datensätzen umzugehen, ohne den gesamten Datensatz gleichzeitig im Speicher halten zu müssen.
Eine Funktion, um alle Benutzer zu laden, ohne alle Datensätze auf einmal im Speicher zu halten:
function getUsers($pdo) {
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
yield $row;
}
}
So können alle Benutzer nacheinander verarbeitet werden, es befinden sich aber immer nur die Daten für einen Benutzer im Speicher:
foreach (getUsers($pdo) as $user) {
processUser($user);
}
Eine weitere mögliche Einsatzmöglichkeit ist z.B. das Auslesen von großen Dateien, die zeilenweise verarbeitet werden sollen, ohne die gesamte Datei auf einmal einzulesen.
Mit PHP 8 wurde die Constructor Property Promotion eingeführt, die die Definition von Klassenvariablen, die über den Konstruktor übergeben werden, vereinfacht und verkürzt. Diese Variablen können direkt als Parameter des Konstruktors gesetzt werden, ohne dass eine weitere Definition und Zuweisung erforderlich ist.
Beispiel
class CustomerDTO
{
public function __construct(
public string $name,
public string $email,
public DateTimeImmutable $birth_date
) {}
}
Das führt dazu, dass die Variablen in der Klasse definiert und gleichzeitig gefüllt werden.
Das obige Beispiel wird intern behandelt, als ob folgender, klassischer Code geschrieben wurde:
class CustomerDTO
{
public string $name;
public string $email;
public DateTimeImmutable $birth_date;
public function __construct(
string $name,
string $email,
DateTimeImmutable $birth_date
) {
$this->name = $name;
$this->email = $email;
$this->birth_date = $birth_date;
}
}