最典型的用法是使用堆栈、队列或集合,例如当您排队任务、创建调用堆栈或操作 JSON、XML 等元素时。
与 RuntimeException 类的其他异常一样,这种类型的错误无法在您的 IDE 或编译器(例如)中检测到。
<?php
$f1 = function() { setTypeControl('username');};
$f2 = function() { setTypeControl('userpass');};
$f3 = function() { setButton('Add');};
$f4 = function() { setButton('OK');};
$tasks = new class {
private $list;
public function __construct() {
$this->list = new SplQueue;
}
public function add(callable $func) {
$this->list->enqueue($func);
}
public function do() {
if ($this->list->isEmpty()) {
throw new UnderflowException;
} else {
call_user_func($this->list->dequeue());
}
}
};
$tasks->add($f1);
$tasks->add($f2);
$tasks->add($f3);
$tasks->add($f4);
$tasks->do(); $tasks->do(); $tasks->do(); $tasks->do(); $tasks->do();