网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
<?php
class Event
{
private $events = [];
// 绑定事件
public function on($name, $handler, $data = null, $append = true)
{
// 判断要添加的事件是否已经被监听,实现给一个事件绑定多个回调函数
if ($append || empty($this->events[$name])) {
$this->events[$name][] = [$handler, $data];
} else {
// 如果这个事件没有被监听过就添加一个新的监听
array\_unshift($this->events[$name], [$handler, $data]);
}
}
// 解绑事件
public function off($name, $handler = null)
{
// 如果事件不存在,返回 false
if (empty($this->events[$name])) {
return false;
}
// 如果没有指定具体的回调函数,则删除这个事件的所有回调
if ($handler === null) {
unset($this->events[$name]);
return true;
}
$removed = false;
// plain event names
if (isset($this->events[$name])) {
// 通过循环删除指定中的回调函数
foreach ($this->events[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->events[$name][$i]);
$removed = true;
}
}
if ($removed) {
// 如果删除成功,则重建一个事件回调函数数组的索引
$this->events[$name] = array\_values($this->events[$name]);
return $removed;
}
}
return $removed;
}
// 触发事件
![img](https://img-blog.csdnimg.cn/img_convert/9974ca88a23e5697f3304bf482f37b20.png)
![img](https://img-blog.csdnimg.cn/img_convert/8e6f9ff26481871f3c74e0ecb37b29e2.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**