如果队列为空,dequeue() 将抛出一个 'RuntimeException' 异常,信息为 'Can't shift from an empty datastructure'。
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
SplQueue::dequeue — 从队列中出队一个节点
此函数没有参数。
出队节点的值。
如果队列为空,dequeue() 将抛出一个 'RuntimeException' 异常,信息为 'Can't shift from an empty datastructure'。
我认为这是一个有趣的方式来排列方法调用,然后连续调用它们。这可能作为事务执行类或其他东西的基础。
<?php
$q = new SplQueue();
$q->setIteratorMode(SplQueue::IT_MODE_DELETE);
$q->enqueue(array("FooBar", "foo"));
$q->enqueue(array("FooBar", "bar"));
$q->enqueue(array("FooBar", "msg", "Hi there!"));
foreach ($q as $task) {
if (count($task) > 2) {
list($class, $method, $args) = $task;
$class::$method($args);
} else {
list($class, $method) = $task;
$class::$method();
}
}
class FooBar {
public static function foo() {
echo "FooBar::foo() called.\n";
}
public static function bar() {
echo "FooBar::bar() called.\n";
}
public static function msg($msg) {
echo "$msg\n";
}
}
?>
结果
FooBar::foo() called.
FooBar::bar() called.
Hi there!
<?php
$q = new SplQueue();
$q->setIteratorMode(SplQueue::IT_MODE_DELETE);
$q->enqueue('item 1');
$q->enqueue('item 2');
$q->enqueue('item 3');
$q->dequeue();
$q->dequeue();
foreach ($q as $item) {
echo $item;
}
//结果: item 3
$q->dequeue(); //致命错误:未捕获的异常 'RuntimeException'
//信息为 'Can't shift from an empty datastructure'
?>
我认为这是一个有趣的方式来排列方法调用,然后连续调用它们。这可能作为事务执行类或其他东西的基础。
<?php
$q = new SplQueue();
$q->setIteratorMode(SplQueue::IT_MODE_DELETE);
$q->enqueue(array("FooBar", "foo"));
$q->enqueue(array("FooBar", "bar"));
$q->enqueue(array("FooBar", "msg", "Hi there!"));
foreach ($q as $task) {
if (count($task) > 2) {
list($class, $method, $args) = $task;
$class::$method($args);
} else {
list($class, $method) = $task;
$class::$method();
}
}
class FooBar {
public static function foo() {
echo "FooBar::foo() called.\n";
}
public static function bar() {
echo "FooBar::bar() called.\n";
}
public static function msg($msg) {
echo "$msg\n";
}
}
?>
结果
FooBar::foo() called.
FooBar::bar() called.
Hi there!