Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

FilterIterator.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 2.44 KiB


 001  <?php
 002  /**
 003   * Zend Framework (http://framework.zend.com/)
 004   *
 005   * @link      http://github.com/zendframework/zf2 for the canonical source repository
 006   * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 007   * @license   http://framework.zend.com/license/new-bsd New BSD License
 008   */
 009   
 010  namespace Zend\EventManager\Filter;
 011   
 012  use Zend\Stdlib\CallbackHandler;
 013  use Zend\Stdlib\SplPriorityQueue;
 014   
 015  /**
 016   * Specialized priority queue implementation for use with an intercepting
 017   * filter chain.
 018   *
 019   * Allows removal
 020   */
 021  class FilterIterator extends SplPriorityQueue
 022  {
 023      /**
 024       * Does the queue contain a given value?
 025       *
 026       * @param  mixed $datum
 027       * @return bool
 028       */
 029      public function contains($datum)
 030      {
 031          $chain = clone $this;
 032          foreach ($chain as $item) {
 033              if ($item === $datum) {
 034                  return true;
 035              }
 036          }
 037          return false;
 038      }
 039   
 040      /**
 041       * Remove a value from the queue
 042       *
 043       * This is an expensive operation. It must first iterate through all values,
 044       * and then re-populate itself. Use only if absolutely necessary.
 045       *
 046       * @param  mixed $datum
 047       * @return bool
 048       */
 049      public function remove($datum)
 050      {
 051          $this->setExtractFlags(self::EXTR_BOTH);
 052   
 053          // Iterate and remove any matches
 054          $removed = false;
 055          $items   = array();
 056          $this->rewind();
 057          while (!$this->isEmpty()) {
 058              $item = $this->extract();
 059              if ($item['data'] === $datum) {
 060                  $removed = true;
 061                  continue;
 062              }
 063              $items[] = $item;
 064          }
 065   
 066          // Repopulate
 067          foreach ($items as $item) {
 068              $this->insert($item['data'], $item['priority']);
 069          }
 070   
 071          $this->setExtractFlags(self::EXTR_DATA);
 072          return $removed;
 073      }
 074   
 075      /**
 076       * Iterate the next filter in the chain
 077       *
 078       * Iterates and calls the next filter in the chain.
 079       *
 080       * @param  mixed $context
 081       * @param  array $params
 082       * @param  FilterIterator $chain
 083       * @return mixed
 084       */
 085      public function next($context = null, array $params = array(), $chain = null)
 086      {
 087          if (empty($context) || $chain->isEmpty()) {
 088              return;
 089          }
 090   
 091          $next = $this->extract();
 092          if (!$next instanceof CallbackHandler) {
 093              return;
 094          }
 095   
 096          $return = call_user_func($next->getCallback(), $context, $params, $chain);
 097          return $return;
 098      }
 099  }
 100