SplQueue::dequeue

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

SplQueue::dequeueDequeues a node from the queue

说明

public SplQueue::dequeue ( ) : mixed

Dequeues value from the top of the queue.

Note:

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

参数

此函数没有参数。

返回值

The value of the dequeued node.

User Contributed Notes

mark at bull-roarer dot com 06-Jul-2013 03:31
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!
mark at bull-roarer dot com 06-Jul-2013 03:30
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!
andresdzphp at php dot net 30-Sep-2011 11:10
<?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'
?>
xuecan at gmail dot com 20-Jan-2010 08:57
If the queue is empty, dequeue() will raise an 'RuntimeException' with message 'Can't shift from an empty datastructure'.