Signatur
Beschreibung
Swoole\Serialize ist eine statische Hilfsklasse aus dem Swoole-Framework, die eine eigene, hochperformante Binär-Serialisierung von PHP-Werten anbietet. Im Gegensatz zum eingebauten serialize() / unserialize()-Paar erzeugt Swoole eine kompaktere Binärdarstellung, die für die Nutzung in schnellen IPC- oder Cache-Szenarien (z. B. Redis, Shared Memory) optimiert ist.
Die Klasse stellt lediglich zwei statische Methoden bereit: Swoole\Serialize::pack() wandelt einen beliebigen PHP-Wert (Skalare, Arrays, Objekte) in einen Binär-String um, und Swoole\Serialize::unpack() stellt den ursprünglichen Wert wieder her. Dies macht sie ideal für Anwendungsfälle, in denen große Mengen an Daten zwischen Prozessen oder Coroutinen übertragen werden müssen.
Die Klasse ist im Swoole-PECL-Extension enthalten und steht nur zur Verfügung, wenn die Extension korrekt kompiliert und geladen wurde. Sie ist nicht Teil des PHP-Kerns. Bitte beachten Sie, dass Swoole\Serialize in neueren Swoole-Versionen als veraltet gilt und schrittweise entfernt wurde – die empfohlene Alternative ist in der Regel igbinary oder das native serialize().
- Unterstützt Skalare, Arrays und einfache Objekte.
- Das erzeugte Binärformat ist nicht kompatibel mit dem PHP-eigenen Serialisierungsformat.
- Erfordert die Swoole-Extension (z. B. via PECL).
Beispiele
Einfaches Serialisieren und Deserialisieren eines Arrays
<?php
// Voraussetzung: Swoole-Extension geladen
$data = [
'user' => 'Alice',
'score' => 42,
'tags' => ['php', 'swoole', 'async'],
];
// Serialisieren
$binary = Swoole\Serialize::pack($data);
echo 'Serialisierte Bytes: ' . strlen($binary) . PHP_EOL;
// Deserialisieren
$restored = Swoole\Serialize::unpack($binary);
var_dump($restored);
Verwendung als schneller Cache-Serializer (Swoole Table / Redis)
<?php
// Beispiel: Datensatz in einem Swoole-basierten Cache speichern
$sessionData = [
'user_id' => 1001,
'username' => 'bob',
'roles' => ['admin', 'editor'],
'last_login' => time(),
];
// Packen für die Übertragung / Speicherung
$packed = Swoole\Serialize::pack($sessionData);
// Simulierter Speicher (z. B. Redis-SET würde $packed speichern)
$storage = $packed;
// Beim Lesen: entpacken
$unpacked = Swoole\Serialize::unpack($storage);
echo 'Benutzer: ' . $unpacked['username'] . PHP_EOL;
echo 'Rollen: ' . implode(', ', $unpacked['roles']) . PHP_EOL;
// Wichtig · Fallstricke
Deprecation-Hinweis: Swoole\Serialize wurde in neueren Swoole-Versionen (ab ca. 4.x) als veraltet markiert und in einigen Builds vollständig entfernt. Prüfen Sie daher vor dem Einsatz, ob die Klasse in Ihrer installierten Swoole-Version noch verfügbar ist (class_exists('Swoole\\Serialize')).
Sicherheitshinweis: Deserialisieren Sie niemals Binärdaten aus nicht vertrauenswürdigen Quellen (z. B. aus HTTP-Anfragen). Obwohl Swoole\Serialize kein PHP-Object-Injection-Problem wie unserialize() teilt, sollten eingehende Binärdaten grundsätzlich validiert und nur aus internen, kontrollierten Quellen gelesen werden.
Format-Inkompatibilität: Das von pack() erzeugte Binärformat ist nicht mit PHP-nativem serialize(), json_encode() oder igbinary kompatibel. Ein Mix dieser Formate führt zu Fehlern beim Deserialisieren.