PHP 8.5.0 RC 2 available for testing

SplQueue::dequeue

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

SplQueue::dequeue β€” Dequeues a node from the queue

Description

public SplQueue::dequeue(): mixed

Dequeues value from the top of the queue.

Note:

SplQueue::dequeue() is an alias of SplDoublyLinkedList::shift().

Parameters

This function has no parameters.

Return Values

The value of the dequeued node.

οΌ‹add a note

User Contributed Notes 4 notes

up
10
xuecan at gmail dot com ΒΆ
15 years ago
If the queue is empty, dequeue() will raise an 'RuntimeException' with message 'Can't shift from an empty datastructure'.
up
5
mark at bull-roarer dot com ΒΆ
12 years ago
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!
up
3
andresdzphp at php dot net ΒΆ
14 years ago
<?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'
?>
up
0
mark at bull-roarer dot com ΒΆ
12 years ago
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!
To Top