This commit is contained in:
as2252258@163.com
2021-02-28 17:25:49 +08:00
parent 5797d87068
commit 7eb9cca970
+32 -19
View File
@@ -153,13 +153,17 @@ class Event extends BaseObject
*/ */
public function get($name, $handler): mixed public function get($name, $handler): mixed
{ {
if (!$this->exists($name)) { if (!$this->exists($name, $handler)) {
return null; return null;
} }
if (empty($handler)) {
return $this->_events[$name];
}
foreach ($this->_events[$name] as $event) { foreach ($this->_events[$name] as $event) {
[$callback, $parameter] = $event; [$callback, $parameter] = $event;
if ($callback === $handler) { if ($callback === $handler) {
return $event; return [$event];
} }
} }
return null; return null;
@@ -192,28 +196,37 @@ class Event extends BaseObject
* @return bool * @return bool
*/ */
public function trigger($name, $parameter = null, $handler = null, $is_remove = false): bool public function trigger($name, $parameter = null, $handler = null, $is_remove = false): bool
{
$events = $this->get($name, $handler);
if (empty($events)) {
return true;
}
foreach ($events as $index => $event) {
$this->execute($event, $parameter);
}
if ($is_remove) {
$this->offName($name);
}
return true;
}
/**
* @param $event
* @param $parameter
* @return bool
* @throws Exception
*/
private function execute($event, $parameter)
{ {
try { try {
if (!$this->exists($name)) { $meta = $this->mergeParams($event[1], $parameter);
return true; if (call_user_func($event[0], ...$meta) === false) {
} return false;
if (!empty($handler) && $this->exists($name, $handler)) {
$events = [$this->get($name, $handler)];
} else {
$events = $this->_events[$name];
}
foreach ($events as $index => $event) {
$meta = $this->mergeParams($event[1], $parameter);
if (call_user_func($event[0], ...$meta) === false) {
return false;
}
}
if ($is_remove) {
$this->offName($name);
} }
return true; return true;
} catch (\Throwable $throwable) { } catch (\Throwable $throwable) {
return false; return $this->addError($throwable);
} }
} }