Start · Sprachen · PHP · Referenz · parallel\Events\Event

parallel\Events\Event

Klasse

Repräsentiert ein einzelnes Ereignis, das von <code>parallel\Events</code> nach dem Polling zurückgegeben wird.

seit PHP 1.1.0 Kategorie: misc

Signatur

class parallel\Events\Event

Beschreibung

parallel\Events\Event ist ein einfaches Datenobjekt (Value Object), das von der Methode parallel\Events::poll() zurückgegeben wird. Es enthält alle relevanten Informationen über ein eingetretenes Ereignis – also z. B. ob ein Channel lesbar oder schreibbar ist, ob ein Future einen Wert produziert hat oder ob ein Fehler aufgetreten ist.

Die Klasse besitzt ausschließlich öffentliche, schreibgeschützte Eigenschaften und keinen öffentlichen Konstruktor. Instanzen werden intern von der parallel\Events-Ereignisschleife erzeugt und als Rückgabewerte von poll() geliefert. Der Entwickler liest lediglich die Eigenschaften aus, um den Ereignistyp, die Quelle und ggf. den transportierten Wert zu ermitteln.

Die wichtigste Eigenschaft ist type, die eine der Konstanten aus parallel\Events\Event\Type enthält (z. B. Type::Read, Type::Write, Type::Close, Type::Cancel, Type::Kill oder Type::Error). Je nach Typ sind die weiteren Eigenschaften object, source und value befüllt oder null.

Dieser Typ ist besonders nützlich in parallelen Architekturen, in denen mehrere Futures und/oder Channels gleichzeitig überwacht werden sollen, ohne aktiv auf jedes einzelne Objekt zu blockieren.

Beispiele

Grundlegende Verwendung mit parallel\Events::poll()

<?php
use parallel\{Runtime, Channel, Events};
use parallel\Events\Event\Type;

$channel = Channel::make('data');
$runtime = new Runtime();

$runtime->run(static function (): void {
    $ch = Channel::open('data');
    $ch->send('Hallo aus dem parallelen Thread!');
    $ch->close();
});

$events = new Events();
$events->addChannel($channel);
$events->setBlocking(true);

while ($event = $events->poll()) {
    /** @var \parallel\Events\Event $event */
    switch ($event->type) {
        case Type::Read:
            echo 'Gelesen: ' . $event->value . PHP_EOL;
            break;
        case Type::Close:
            echo 'Channel "' . $event->source . '" wurde geschlossen.' . PHP_EOL;
            break;
        case Type::Error:
            echo 'Fehler aufgetreten bei: ' . $event->source . PHP_EOL;
            break;
    }
}
Gelesen: Hallo aus dem parallelen Thread! Channel "data" wurde geschlossen.

Future-Ergebnis über Events empfangen

<?php
use parallel\{Runtime, Events};
use parallel\Events\Event\Type;

$runtime = new Runtime();
$future  = $runtime->run(static function (): int {
    return 42;
});

$events = new Events();
$events->addFuture('antwort', $future);
$events->setBlocking(true);

if ($event = $events->poll()) {
    if ($event->type === Type::Read) {
        // $event->source enthält den Namen 'antwort'
        // $event->value enthält den Rückgabewert des Futures
        printf(
            'Future "%s" lieferte: %d%s',
            $event->source,
            $event->value,
            PHP_EOL
        );
    }
}
Future "antwort" lieferte: 42

// Wichtig · Fallstricke

Öffentliche Eigenschaften im Überblick:

  • type (parallel\Events\Event\Type) – Gibt den Ereignistyp an (Read, Write, Close, Cancel, Kill, Error).
  • source (string|null) – Der Name des überwachten Objekts (Channel-Name oder Future-Bezeichner), aus dem das Ereignis stammt.
  • object (object|null) – Referenz auf das ursprüngliche Channel- oder Future-Objekt.
  • value (mixed) – Der bei einem Lese-Ereignis vom Channel oder Future transportierte Wert; bei anderen Ereignistypen null.

Achtung: Die Klasse steht nur zur Verfügung, wenn die PECL-Erweiterung parallel installiert ist. Sie erfordert PHP 8.0+ mit ZTS (Zend Thread Safety). Im Non-ZTS-Modus ist die Erweiterung nicht lauffähig.

Da parallel\Events::poll() im nicht-blockierenden Modus null zurückgeben kann, sollte der Rückgabewert stets auf null geprüft werden, bevor auf Eigenschaften eines Event-Objekts zugegriffen wird.