If the queue is empty, dequeue() will raise an 'RuntimeException' with message 'Can't shift from an empty datastructure'.(PHP 5 >= 5.3.0, PHP 7, PHP 8)
SplQueue::dequeue — Удаляет элемент из очереди
Удаляет value из начала очереди.
Замечание:
SplQueue::dequeue() - псевдоним SplDoublyLinkedList::shift().
Сигнатура функции не содержит параметров.
Значение удалённого из очереди элемента.
If the queue is empty, dequeue() will raise an 'RuntimeException' with message 'Can't shift from an empty datastructure'.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!<?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'
?>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!