/** * {@inheritdoc} */ public function isCoalesced() { if (count($this->_frames) == 0) { return false; } $last = $this->_frames->top(); return $last->isCoalesced() && $last->isFinal(); }
$list->pop(); // key() // 获得当前节点的索引值 $list->key(); // count() // 获得链表的数量 $list->count(); // rewind() // 将指针返回至初始节点 $list->rewind(); // current() // 获得当前节点 $list->current(); // top() // 返回最后一个节点的值 $list->top(); // bottom() // 返回第一个节点的值 $list->bottom(); // next() // 指针移到下一个节点 $list->next(); // prev() // 指针移到上一个节点, 如果原本指针在第一个,那么前一个节点为-1,并且将无法获得当前值 $list->prev(); // valid() // 判断该链表是否有更多的值,返回bool $list->valid(); // isEmpty() // 判断该链表是否为空链表,返回bool $list->isEmpty();
/** * @return MethodMetaInfo */ public function currentMethod() { return $this->methods->top(); }
try { $dll->shift(); } catch (RuntimeException $e) { echo "Exception: " . $e->getMessage() . "\n"; } // data consistency $a = 2; $dll->push($a); echo $dll->pop() . "\n"; $a = 2; $dll->unshift($a); echo $dll->shift() . "\n"; // peakable $dll->push(1); $dll->push(2); echo $dll->top() . "\n"; echo $dll->bottom() . "\n"; $dll->pop(); $dll->pop(); // countable $dll->push(NULL); $dll->push(NULL); echo count($dll) . "\n"; echo $dll->count() . "\n"; var_dump($dll->pop()); var_dump($dll->pop()); // clonable $dll->push(2); $dll_clone = clone $dll; $dll_clone->pop(); echo count($dll) . "\n";
<?php $list = new SplDoublyLinkedList(); $list->push("top"); $list->top(null);
<?php $list = new SplDoublyLinkedList(); $list->push("top"); $list->top(3.14159);
<?php $list = new SplDoublyLinkedList(); $list->push("top"); $list->top(array());
<?php $list = new SplDoublyLinkedList(); $list->push("top"); $list->top(45);
/** * Notify observers, this method will store the return value from each * observer in a SplDoublyLinkedList. If any one of the observers returns * 'false', then the notification stops with the last value of the List * being 'false'. * * @param string $event * @param mixed $args * @return SplDoublyLinkedList | return values from the observers */ public function notify($event, $args = null) { $args = $args instanceof \stdClass && $args->name === 'static' ? $args->args : array_slice(func_get_args(), 1); $list = new SplDoublyLinkedList(); foreach ($this->getObservers($event) as $observer) { $list->push($this->invoke($event, $observer, $args)); if (!$list->isEmpty() && $list->top() === false) { break; } } return $list; }
<?php $dll = new SplDoublyLinkedList(); $dll->push('Never'); $dll->push('gonna'); $dll->push('give'); // at pos 0, shift everything up $dll->add(0, 'you'); // Should be the end $dll->add(4, 'up'); // Somewhere in the middle $dll->add(2, 'let'); try { // Key 12 is unaccessible $dll->add(12, 'down'); } catch (OutOfRangeException $e) { echo $e->getMessage(), PHP_EOL; } foreach ($dll as $key => $val) { echo $key . '=>' . $val, PHP_EOL; } echo "count(): " . $dll->count(), PHP_EOL; echo "top(): " . $dll->top(), PHP_EOL; echo "bottom(): " . $dll->bottom(), PHP_EOL;
/** * Peeks a `Token` from the end of the list. * * @return Token The last token. * @link http://www.php.net/manual/en/spldoublylinkedlist.top.php */ public function top() { return $this->tokens->top(); }