观察者是为了记录某件事而创造的对象。例如,下面的代码等待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