$result = [];
$listeners = $this->listener[$event] ?? [];
$listeners = array_unique($listeners, SORT_REGULAR);
foreach ($listeners as $key => $listener) {
$result[$key] = $this->dispatch($listener, $params);
if (false === $result[$key] || (!is_null($result[$key]) && $once)) { // isset === (!is_null) isset是语句 is_null()是函数
break;
}
}
return $once ? end($result) : $result;
上边的代码,是一个循环过程,其中有if判断条件,达成条件则退出循环,否则执行循环直到栈都被遍历了。
最后的return值是根据上边if判断来决定的,
因为if中有三组条件,
条件一、false === $result[$key] ,这是值完全等价为false时
条件二、|| 是条件一为假时才执行 ,前一个条件内容为值存在,执行 !is_null($result[$key]) && $once
条件三、!is_null($result[$key]) === isset($result[$key]) ,当$result[$key]存在时,判断$once的值
以上分析,
$once为真,执行end($result),指针指向数组最后一个元素,
$once为假,执行$result,返回数组。
