觀察者是爲了記錄某件事而創造的對象。例如,下面的代碼等待STDIN
成爲可讀的:php
<?php // Wait until STDIN is readable // 等待直到STDIN可讀 $w = new EvIo(STDIN, Ev::READ, function ($watcher, $revents) { echo "STDIN is readable\n"; }); Ev::run(Ev::RUN_ONCE); ?>
全部觀察者構造函數會自動啓動觀察者。createStopped
方法建立中止監視器(例如 EvIo::createStopped())函數
注意,當觀察者對象被破壞時,觀察者會自動中止。所以,應該保留由構造函數或工廠方法返回的觀察者對象。oop
還要注意的是,全部改變watcher
屬性(set,priority 等)的方法都會自動中止並在激活時再次啓動,這意味着掛起的事件會丟失。code
參見: Watcher callbacks.對象
全部監視器能夠是活動的(等待事件)或不活動的(暫停)。只有活動的觀察者纔會調用它們的回調。全部回調都會被調用(至少有兩個參數):watcher
: 觀察者,和revents
: 接收時間的位掩碼。事件
觀察者回調傳遞給觀察者構造函數(派生於EvWatcher - EvCheck::__construct() , EvChild::__construct()的類 等)。觀察者回調應該匹配如下原型:原型
void callback ([ object $watcher = NULL [, int $revents = NULL ]] ) watcher (觀察者實例) The watcher instance(of a class extending EvWatcher ). revents (觀察者接收的事件集) Watcher received events.
每一個監視者類型都有相關的revents
位掩碼,所以能夠對多個觀察者使用相同的回調。事件掩碼是在類型以後命名的,即 EvChild (or EvLoop::child() ), 設置 EV::CHILD , EvPrepare (or EvLoop::prepare() ) 設置 Ev::PREPARE , EvPeriodic (or EvLoop::periodic() ) sets Ev::PERIODIC等等,除了I/O事件以外(它能夠同時設置Ev::READ 和 Ev::WRITE bits)it