Signatur
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;
}
}
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
);
}
}
// 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ünglicheChannel- oderFuture-Objekt.value(mixed) – Der bei einem Lese-Ereignis vom Channel oder Future transportierte Wert; bei anderen Ereignistypennull.
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.