作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Standard PHP Library通过 SplSubject
和 SplObserver
类包括一些资源称为Observer模式的引用实现。对于我自己的一生,我无法弄清楚这些方法如何非常有用,无法将实际事件或任何其他信息与通知一起传递:
class MySubject implements SplSubject {
protected $_observers = [];
public function attach(SplObserver $observer) {
$id = spl_object_hash($observer);
$this->_observers[$id] = $observer;
}
public function detach(SplObserver $observer) {
$id = spl_object_hash($observer);
if (isset($this->_observers[$id])) {
unset($this->_observers[$id]);
}
}
public function notify() {
foreach ($this->_observers as $observer) {
$observer->update($this);
}
}
}
class MyObserver implements SplObserver {
public function update(SplSubject $subject) {
// something happened with $subject, but what
// was it???
}
}
$subject = new MySubject();
$observer = new MyObserver();
$subject->attach($observer);
$subject->notify();
public function update(SplSubject $subject, Event $event) { /* ... */ }
PHP Fatal error: Declaration of MyObserver::update() must be compatible with SplObserver::update(SplSubject $SplSubject)
SplObserver::update()
中检查其是否存在。
最佳答案
您可以使用可选参数实现update方法,并且仍然满足SplSubject接口(interface)。
class MyObserver implements SplObserver {
public function update(SplSubject $subject, $eventData = null) {
if (is_null($eventData))
// carefull
}
}
关于php - SplSubject/SplObserver有何用处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13774149/
我正在阅读有关 Edit Distance between 2 strings 的问题。 它可以使用编辑距离的公式通过动态规划来解决。我无法理解的是它的用处。首先,这与知道 2 个字符串的最长公共(p
我是一名优秀的程序员,十分优秀!