Start · Sprachen · PHP · Referenz · Swoole\Serialize

Swoole\Serialize

Klasse

Bietet eine schnelle, binäre Serialisierung und Deserialisierung von PHP-Werten als leistungsfähige Alternative zu <code>serialize()</code>.

Kategorie: misc

Signatur

class Swoole\Serialize

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);
Serialisierte Bytes: 68 array(3) { ["user"]=> string(5) "Alice" ["score"]=> int(42) ["tags"]=> array(3) { [0]=> string(3) "php" [1]=> string(6) "swoole" [2]=> string(5) "async" } }

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;
Benutzer: bob Rollen: admin, editor

// 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.