©
本文档使用
php.cn手册 发布
(PHP 5 >= 5.3.0)
SplQueue::dequeue — Dequeues a node from the queue
Dequeues value
from the top of the queue.
Note:
SplQueue::dequeue() is an alias of SplDoublyLinkedList::shift() .
此函数没有参数。
The value of the dequeued node.
[#1] mark at bull-roarer dot com [2013-07-06 03:31:27]
I just thought this was a fun and interesting way for lining up method calls and then calling them back-to-back. Might be useful as a basis for a transactional execution class or something.
<?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";
}
}
?>
Results:
FooBar::foo() called.
FooBar::bar() called.
Hi there!
[#2] mark at bull-roarer dot com [2013-07-06 03:30:40]
I just thought this was a fun and interesting way for lining up method calls and then calling them back-to-back. Might be useful as a basis for a transactional execution class or something.
<?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";
}
}
?>
Results:
FooBar::foo() called.
FooBar::bar() called.
Hi there!
[#3] andresdzphp at php dot net [2011-09-30 11:10:52]
<?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;
}
//Result: item 3
$q->dequeue(); //Fatal error: Uncaught exception 'RuntimeException'
//with message 'Can't shift from an empty datastructure'
?>
[#4] xuecan at gmail dot com [2010-01-20 20:57:28]
If the queue is empty, dequeue() will raise an 'RuntimeException' with message 'Can't shift from an empty datastructure'.