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

ExprBuilder.php

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


001  <?php
002   
003  /*
004   * This file is part of the Symfony package.
005   *
006   * (c) Fabien Potencier <fabien@symfony.com>
007   *
008   * For the full copyright and license information, please view the LICENSE
009   * file that was distributed with this source code.
010   */
011   
012  namespace Symfony\Component\Config\Definition\Builder;
013   
014  use Symfony\Component\Config\Definition\Exception\UnsetKeyException;
015   
016  /**
017   * This class builds an if expression.
018   *
019   * @author Johannes M. Schmitt <schmittjoh@gmail.com>
020   * @author Christophe Coevoet <stof@notk.org>
021   */
022  class ExprBuilder
023  {
024      protected $node;
025      public $ifPart;
026      public $thenPart;
027   
028      /**
029       * Constructor.
030       *
031       * @param NodeDefinition $node The related node
032       */
033      public function __construct(NodeDefinition $node)
034      {
035          $this->node = $node;
036      }
037   
038      /**
039       * Marks the expression as being always used.
040       *
041       * @param \Closure $then
042       *
043       * @return ExprBuilder
044       */
045      public function always(\Closure $then = null)
046      {
047          $this->ifPart = function ($v) { return true; };
048   
049          if (null !== $then) {
050              $this->thenPart = $then;
051          }
052   
053          return $this;
054      }
055   
056      /**
057       * Sets a closure to use as tests.
058       *
059       * The default one tests if the value is true.
060       *
061       * @param \Closure $closure
062       *
063       * @return ExprBuilder
064       */
065      public function ifTrue(\Closure $closure = null)
066      {
067          if (null === $closure) {
068              $closure = function ($v) { return true === $v; };
069          }
070   
071          $this->ifPart = $closure;
072   
073          return $this;
074      }
075   
076      /**
077       * Tests if the value is a string.
078       *
079       * @return ExprBuilder
080       */
081      public function ifString()
082      {
083          $this->ifPart = function ($v) { return is_string($v); };
084   
085          return $this;
086      }
087   
088      /**
089       * Tests if the value is null.
090       *
091       * @return ExprBuilder
092       */
093      public function ifNull()
094      {
095          $this->ifPart = function ($v) { return null === $v; };
096   
097          return $this;
098      }
099   
100      /**
101       * Tests if the value is an array.
102       *
103       * @return ExprBuilder
104       */
105      public function ifArray()
106      {
107          $this->ifPart = function ($v) { return is_array($v); };
108   
109          return $this;
110      }
111   
112      /**
113       * Tests if the value is in an array.
114       *
115       * @param array $array
116       *
117       * @return ExprBuilder
118       */
119      public function ifInArray(array $array)
120      {
121          $this->ifPart = function ($v) use ($array) { return in_array($v, $array, true); };
122   
123          return $this;
124      }
125   
126      /**
127       * Tests if the value is not in an array.
128       *
129       * @param array $array
130       *
131       * @return ExprBuilder
132       */
133      public function ifNotInArray(array $array)
134      {
135          $this->ifPart = function ($v) use ($array) { return !in_array($v, $array, true); };
136   
137          return $this;
138      }
139   
140      /**
141       * Sets the closure to run if the test pass.
142       *
143       * @param \Closure $closure
144       *
145       * @return ExprBuilder
146       */
147      public function then(\Closure $closure)
148      {
149          $this->thenPart = $closure;
150   
151          return $this;
152      }
153   
154      /**
155       * Sets a closure returning an empty array.
156       *
157       * @return ExprBuilder
158       */
159      public function thenEmptyArray()
160      {
161          $this->thenPart = function ($v) { return array(); };
162   
163          return $this;
164      }
165   
166      /**
167       * Sets a closure marking the value as invalid at validation time.
168       *
169       * if you want to add the value of the node in your message just use a %s placeholder.
170       *
171       * @param string $message
172       *
173       * @return ExprBuilder
174       *
175       * @throws \InvalidArgumentException
176       */
177      public function thenInvalid($message)
178      {
179          $this->thenPart = function ($v) use ($message) {throw new \InvalidArgumentException(sprintf($message, json_encode($v))); };
180   
181          return $this;
182      }
183   
184      /**
185       * Sets a closure unsetting this key of the array at validation time.
186       *
187       * @return ExprBuilder
188       *
189       * @throws UnsetKeyException
190       */
191      public function thenUnset()
192      {
193          $this->thenPart = function ($v) { throw new UnsetKeyException('Unsetting key'); };
194   
195          return $this;
196      }
197   
198      /**
199       * Returns the related node.
200       *
201       * @return NodeDefinition
202       *
203       * @throws \RuntimeException
204       */
205      public function end()
206      {
207          if (null === $this->ifPart) {
208              throw new \RuntimeException('You must specify an if part.');
209          }
210          if (null === $this->thenPart) {
211              throw new \RuntimeException('You must specify a then part.');
212          }
213   
214          return $this->node;
215      }
216   
217      /**
218       * Builds the expressions.
219       *
220       * @param ExprBuilder[] $expressions An array of ExprBuilder instances to build
221       *
222       * @return array
223       */
224      public static function buildExpressions(array $expressions)
225      {
226          foreach ($expressions as $k => $expr) {
227              if ($expr instanceof self) {
228                  $if = $expr->ifPart;
229                  $then = $expr->thenPart;
230                  $expressions[$k] = function ($v) use ($if, $then) {
231                      return $if($v) ? $then($v) : $v;
232                  };
233              }
234          }
235   
236          return $expressions;
237      }
238  }
239