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§
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".