Skip to main content

Observer

Trait Observer 

Source
pub trait Observer: Send + Sync {
    // Required method
    fn events(&self) -> Vec<(&'static str, Arc<dyn Listener>)>;
}
Expand description

观察者 trait(对齐 PHP observe 智能订阅)

PHP observe($observer) 通过反射获取所有 onXxx 公开方法, 自动注册为 Xxx 事件的监听器:

class UserObserver
{
    public function onLogin($params) { ... }
    public function onLogout($params) { ... }
}
// 自动注册 Login 和 Logout 事件
Event::observe(new UserObserver());

Rust 端用 Observer trait 模拟(Rust 无反射,需手动声明事件映射):

struct UserObserver;

impl Observer for UserObserver {
    fn events(&self) -> &[(&str, Arc<dyn Listener>)] {
        &[
            ("Login", Arc::new(ClosureListener::new(|_| Ok(Value::Null))),
            ("Logout", Arc::new(ClosureListener::new(|_| Ok(Value::Null))),
        ]
    }
}

Required Methods§

Source

fn events(&self) -> Vec<(&'static str, Arc<dyn Listener>)>

返回观察者监听的所有事件(对齐 PHP 反射 onXxx 方法 → Xxx 事件)

每个元素是 (事件名, 监听器),等价 PHP listen($prefix . $event, [$observer, 'on' . $event])

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§