• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • SplQueue::dequeue()

    (PHP 5 >= 5.3.0, PHP 7)

    Dequeues a node from the queue

    说明

    SplQueue::dequeue(void) : mixed

    Dequeues $value from the top of the queue.

    Note:

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

    参数

    此函数没有参数。

    返回值

    The value of the dequeued node.

    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!