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

Definition.php

Zuletzt modifiziert: 09.10.2024, 12:54 - Dateigröße: 22.24 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\DependencyInjection;
013   
014  use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
015  use Symfony\Component\DependencyInjection\Exception\OutOfBoundsException;
016   
017  /**
018   * Definition represents a service definition.
019   *
020   * @author Fabien Potencier <fabien@symfony.com>
021   */
022  class Definition
023  {
024      private $class;
025      private $file;
026      private $factory;
027      private $factoryClass;
028      private $factoryMethod;
029      private $factoryService;
030      private $shared = true;
031      private $deprecated = false;
032      private $deprecationTemplate = 'The "%service_id%" service is deprecated. You should stop using it, as it will soon be removed.';
033      private $scope = ContainerInterface::SCOPE_CONTAINER;
034      private $properties = array();
035      private $calls = array();
036      private $configurator;
037      private $tags = array();
038      private $public = true;
039      private $synthetic = false;
040      private $abstract = false;
041      private $synchronized = false;
042      private $lazy = false;
043      private $decoratedService;
044      private $autowired = false;
045      private $autowiringTypes = array();
046   
047      protected $arguments;
048   
049      /**
050       * @param string|null $class     The service class
051       * @param array       $arguments An array of arguments to pass to the service constructor
052       */
053      public function __construct($class = null, array $arguments = array())
054      {
055          $this->class = $class;
056          $this->arguments = $arguments;
057      }
058   
059      /**
060       * Sets a factory.
061       *
062       * @param string|array $factory A PHP function or an array containing a class/Reference and a method to call
063       *
064       * @return Definition The current instance
065       */
066      public function setFactory($factory)
067      {
068          if (is_string($factory) && strpos($factory, '::') !== false) {
069              $factory = explode('::', $factory, 2);
070          }
071   
072          $this->factory = $factory;
073   
074          return $this;
075      }
076   
077      /**
078       * Gets the factory.
079       *
080       * @return string|array The PHP function or an array containing a class/Reference and a method to call
081       */
082      public function getFactory()
083      {
084          return $this->factory;
085      }
086   
087      /**
088       * Sets the name of the class that acts as a factory using the factory method,
089       * which will be invoked statically.
090       *
091       * @param string $factoryClass The factory class name
092       *
093       * @return Definition The current instance
094       *
095       * @deprecated since version 2.6, to be removed in 3.0.
096       */
097      public function setFactoryClass($factoryClass)
098      {
099          @trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryClass), E_USER_DEPRECATED);
100   
101          $this->factoryClass = $factoryClass;
102   
103          return $this;
104      }
105   
106      /**
107       * Gets the factory class.
108       *
109       * @return string|null The factory class name
110       *
111       * @deprecated since version 2.6, to be removed in 3.0.
112       */
113      public function getFactoryClass($triggerDeprecationError = true)
114      {
115          if ($triggerDeprecationError) {
116              @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
117          }
118   
119          return $this->factoryClass;
120      }
121   
122      /**
123       * Sets the factory method able to create an instance of this class.
124       *
125       * @param string $factoryMethod The factory method name
126       *
127       * @return Definition The current instance
128       *
129       * @deprecated since version 2.6, to be removed in 3.0.
130       */
131      public function setFactoryMethod($factoryMethod)
132      {
133          @trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryMethod), E_USER_DEPRECATED);
134   
135          $this->factoryMethod = $factoryMethod;
136   
137          return $this;
138      }
139   
140      /**
141       * Sets the service that this service is decorating.
142       *
143       * @param null|string $id        The decorated service id, use null to remove decoration
144       * @param null|string $renamedId The new decorated service id
145       * @param int         $priority  The priority of decoration
146       *
147       * @return Definition The current instance
148       *
149       * @throws InvalidArgumentException In case the decorated service id and the new decorated service id are equals.
150       */
151      public function setDecoratedService($id, $renamedId = null, $priority = 0)
152      {
153          if ($renamedId && $id == $renamedId) {
154              throw new \InvalidArgumentException(sprintf('The decorated service inner name for "%s" must be different than the service name itself.', $id));
155          }
156   
157          if (null === $id) {
158              $this->decoratedService = null;
159          } else {
160              $this->decoratedService = array($id, $renamedId, (int) $priority);
161          }
162   
163          return $this;
164      }
165   
166      /**
167       * Gets the service that decorates this service.
168       *
169       * @return null|array An array composed of the decorated service id, the new id for it and the priority of decoration, null if no service is decorated
170       */
171      public function getDecoratedService()
172      {
173          return $this->decoratedService;
174      }
175   
176      /**
177       * Gets the factory method.
178       *
179       * @return string|null The factory method name
180       *
181       * @deprecated since version 2.6, to be removed in 3.0.
182       */
183      public function getFactoryMethod($triggerDeprecationError = true)
184      {
185          if ($triggerDeprecationError) {
186              @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
187          }
188   
189          return $this->factoryMethod;
190      }
191   
192      /**
193       * Sets the name of the service that acts as a factory using the factory method.
194       *
195       * @param string $factoryService The factory service id
196       *
197       * @return Definition The current instance
198       *
199       * @deprecated since version 2.6, to be removed in 3.0.
200       */
201      public function setFactoryService($factoryService, $triggerDeprecationError = true)
202      {
203          if ($triggerDeprecationError) {
204              @trigger_error(sprintf('%s(%s) is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead.', __METHOD__, $factoryService), E_USER_DEPRECATED);
205          }
206   
207          $this->factoryService = $factoryService;
208   
209          return $this;
210      }
211   
212      /**
213       * Gets the factory service id.
214       *
215       * @return string|null The factory service id
216       *
217       * @deprecated since version 2.6, to be removed in 3.0.
218       */
219      public function getFactoryService($triggerDeprecationError = true)
220      {
221          if ($triggerDeprecationError) {
222              @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
223          }
224   
225          return $this->factoryService;
226      }
227   
228      /**
229       * Sets the service class.
230       *
231       * @param string $class The service class
232       *
233       * @return Definition The current instance
234       */
235      public function setClass($class)
236      {
237          $this->class = $class;
238   
239          return $this;
240      }
241   
242      /**
243       * Gets the service class.
244       *
245       * @return string|null The service class
246       */
247      public function getClass()
248      {
249          return $this->class;
250      }
251   
252      /**
253       * Sets the arguments to pass to the service constructor/factory method.
254       *
255       * @param array $arguments An array of arguments
256       *
257       * @return Definition The current instance
258       */
259      public function setArguments(array $arguments)
260      {
261          $this->arguments = $arguments;
262   
263          return $this;
264      }
265   
266      public function setProperties(array $properties)
267      {
268          $this->properties = $properties;
269   
270          return $this;
271      }
272   
273      public function getProperties()
274      {
275          return $this->properties;
276      }
277   
278      public function setProperty($name, $value)
279      {
280          $this->properties[$name] = $value;
281   
282          return $this;
283      }
284   
285      /**
286       * Adds an argument to pass to the service constructor/factory method.
287       *
288       * @param mixed $argument An argument
289       *
290       * @return Definition The current instance
291       */
292      public function addArgument($argument)
293      {
294          $this->arguments[] = $argument;
295   
296          return $this;
297      }
298   
299      /**
300       * Sets a specific argument.
301       *
302       * @param int   $index
303       * @param mixed $argument
304       *
305       * @return Definition The current instance
306       *
307       * @throws OutOfBoundsException When the replaced argument does not exist
308       */
309      public function replaceArgument($index, $argument)
310      {
311          if ($index < 0 || $index > count($this->arguments) - 1) {
312              throw new OutOfBoundsException(sprintf('The index "%d" is not in the range [0, %d].', $index, count($this->arguments) - 1));
313          }
314   
315          $this->arguments[$index] = $argument;
316   
317          return $this;
318      }
319   
320      /**
321       * Gets the arguments to pass to the service constructor/factory method.
322       *
323       * @return array The array of arguments
324       */
325      public function getArguments()
326      {
327          return $this->arguments;
328      }
329   
330      /**
331       * Gets an argument to pass to the service constructor/factory method.
332       *
333       * @param int $index
334       *
335       * @return mixed The argument value
336       *
337       * @throws OutOfBoundsException When the argument does not exist
338       */
339      public function getArgument($index)
340      {
341          if ($index < 0 || $index > count($this->arguments) - 1) {
342              throw new OutOfBoundsException(sprintf('The index "%d" is not in the range [0, %d].', $index, count($this->arguments) - 1));
343          }
344   
345          return $this->arguments[$index];
346      }
347   
348      /**
349       * Sets the methods to call after service initialization.
350       *
351       * @param array $calls An array of method calls
352       *
353       * @return Definition The current instance
354       */
355      public function setMethodCalls(array $calls = array())
356      {
357          $this->calls = array();
358          foreach ($calls as $call) {
359              $this->addMethodCall($call[0], $call[1]);
360          }
361   
362          return $this;
363      }
364   
365      /**
366       * Adds a method to call after service initialization.
367       *
368       * @param string $method    The method name to call
369       * @param array  $arguments An array of arguments to pass to the method call
370       *
371       * @return Definition The current instance
372       *
373       * @throws InvalidArgumentException on empty $method param
374       */
375      public function addMethodCall($method, array $arguments = array())
376      {
377          if (empty($method)) {
378              throw new InvalidArgumentException(sprintf('Method name cannot be empty.'));
379          }
380          $this->calls[] = array($method, $arguments);
381   
382          return $this;
383      }
384   
385      /**
386       * Removes a method to call after service initialization.
387       *
388       * @param string $method The method name to remove
389       *
390       * @return Definition The current instance
391       */
392      public function removeMethodCall($method)
393      {
394          foreach ($this->calls as $i => $call) {
395              if ($call[0] === $method) {
396                  unset($this->calls[$i]);
397                  break;
398              }
399          }
400   
401          return $this;
402      }
403   
404      /**
405       * Check if the current definition has a given method to call after service initialization.
406       *
407       * @param string $method The method name to search for
408       *
409       * @return bool
410       */
411      public function hasMethodCall($method)
412      {
413          foreach ($this->calls as $call) {
414              if ($call[0] === $method) {
415                  return true;
416              }
417          }
418   
419          return false;
420      }
421   
422      /**
423       * Gets the methods to call after service initialization.
424       *
425       * @return array An array of method calls
426       */
427      public function getMethodCalls()
428      {
429          return $this->calls;
430      }
431   
432      /**
433       * Sets tags for this definition.
434       *
435       * @param array $tags
436       *
437       * @return Definition the current instance
438       */
439      public function setTags(array $tags)
440      {
441          $this->tags = $tags;
442   
443          return $this;
444      }
445   
446      /**
447       * Returns all tags.
448       *
449       * @return array An array of tags
450       */
451      public function getTags()
452      {
453          return $this->tags;
454      }
455   
456      /**
457       * Gets a tag by name.
458       *
459       * @param string $name The tag name
460       *
461       * @return array An array of attributes
462       */
463      public function getTag($name)
464      {
465          return isset($this->tags[$name]) ? $this->tags[$name] : array();
466      }
467   
468      /**
469       * Adds a tag for this definition.
470       *
471       * @param string $name       The tag name
472       * @param array  $attributes An array of attributes
473       *
474       * @return Definition The current instance
475       */
476      public function addTag($name, array $attributes = array())
477      {
478          $this->tags[$name][] = $attributes;
479   
480          return $this;
481      }
482   
483      /**
484       * Whether this definition has a tag with the given name.
485       *
486       * @param string $name
487       *
488       * @return bool
489       */
490      public function hasTag($name)
491      {
492          return isset($this->tags[$name]);
493      }
494   
495      /**
496       * Clears all tags for a given name.
497       *
498       * @param string $name The tag name
499       *
500       * @return Definition
501       */
502      public function clearTag($name)
503      {
504          unset($this->tags[$name]);
505   
506          return $this;
507      }
508   
509      /**
510       * Clears the tags for this definition.
511       *
512       * @return Definition The current instance
513       */
514      public function clearTags()
515      {
516          $this->tags = array();
517   
518          return $this;
519      }
520   
521      /**
522       * Sets a file to require before creating the service.
523       *
524       * @param string $file A full pathname to include
525       *
526       * @return Definition The current instance
527       */
528      public function setFile($file)
529      {
530          $this->file = $file;
531   
532          return $this;
533      }
534   
535      /**
536       * Gets the file to require before creating the service.
537       *
538       * @return string|null The full pathname to include
539       */
540      public function getFile()
541      {
542          return $this->file;
543      }
544   
545      /**
546       * Sets if the service must be shared or not.
547       *
548       * @param bool $shared Whether the service must be shared or not
549       *
550       * @return Definition The current instance
551       */
552      public function setShared($shared)
553      {
554          $this->shared = (bool) $shared;
555   
556          return $this;
557      }
558   
559      /**
560       * Whether this service is shared.
561       *
562       * @return bool
563       */
564      public function isShared()
565      {
566          return $this->shared;
567      }
568   
569      /**
570       * Sets the scope of the service.
571       *
572       * @param string $scope Whether the service must be shared or not
573       *
574       * @return Definition The current instance
575       *
576       * @deprecated since version 2.8, to be removed in 3.0.
577       */
578      public function setScope($scope, $triggerDeprecationError = true)
579      {
580          if ($triggerDeprecationError) {
581              @trigger_error('The '.__METHOD__.' method is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED);
582          }
583   
584          if (ContainerInterface::SCOPE_PROTOTYPE === $scope) {
585              $this->setShared(false);
586          }
587   
588          $this->scope = $scope;
589   
590          return $this;
591      }
592   
593      /**
594       * Returns the scope of the service.
595       *
596       * @return string
597       *
598       * @deprecated since version 2.8, to be removed in 3.0.
599       */
600      public function getScope($triggerDeprecationError = true)
601      {
602          if ($triggerDeprecationError) {
603              @trigger_error('The '.__METHOD__.' method is deprecated since version 2.8 and will be removed in 3.0.', E_USER_DEPRECATED);
604          }
605   
606          return $this->scope;
607      }
608   
609      /**
610       * Sets the visibility of this service.
611       *
612       * @param bool $boolean
613       *
614       * @return Definition The current instance
615       */
616      public function setPublic($boolean)
617      {
618          $this->public = (bool) $boolean;
619   
620          return $this;
621      }
622   
623      /**
624       * Whether this service is public facing.
625       *
626       * @return bool
627       */
628      public function isPublic()
629      {
630          return $this->public;
631      }
632   
633      /**
634       * Sets the synchronized flag of this service.
635       *
636       * @param bool $boolean
637       *
638       * @return Definition The current instance
639       *
640       * @deprecated since version 2.7, will be removed in 3.0.
641       */
642      public function setSynchronized($boolean, $triggerDeprecationError = true)
643      {
644          if ($triggerDeprecationError) {
645              @trigger_error('The '.__METHOD__.' method is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
646          }
647   
648          $this->synchronized = (bool) $boolean;
649   
650          return $this;
651      }
652   
653      /**
654       * Whether this service is synchronized.
655       *
656       * @return bool
657       *
658       * @deprecated since version 2.7, will be removed in 3.0.
659       */
660      public function isSynchronized($triggerDeprecationError = true)
661      {
662          if ($triggerDeprecationError) {
663              @trigger_error('The '.__METHOD__.' method is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
664          }
665   
666          return $this->synchronized;
667      }
668   
669      /**
670       * Sets the lazy flag of this service.
671       *
672       * @param bool $lazy
673       *
674       * @return Definition The current instance
675       */
676      public function setLazy($lazy)
677      {
678          $this->lazy = (bool) $lazy;
679   
680          return $this;
681      }
682   
683      /**
684       * Whether this service is lazy.
685       *
686       * @return bool
687       */
688      public function isLazy()
689      {
690          return $this->lazy;
691      }
692   
693      /**
694       * Sets whether this definition is synthetic, that is not constructed by the
695       * container, but dynamically injected.
696       *
697       * @param bool $boolean
698       *
699       * @return Definition the current instance
700       */
701      public function setSynthetic($boolean)
702      {
703          $this->synthetic = (bool) $boolean;
704   
705          return $this;
706      }
707   
708      /**
709       * Whether this definition is synthetic, that is not constructed by the
710       * container, but dynamically injected.
711       *
712       * @return bool
713       */
714      public function isSynthetic()
715      {
716          return $this->synthetic;
717      }
718   
719      /**
720       * Whether this definition is abstract, that means it merely serves as a
721       * template for other definitions.
722       *
723       * @param bool $boolean
724       *
725       * @return Definition the current instance
726       */
727      public function setAbstract($boolean)
728      {
729          $this->abstract = (bool) $boolean;
730   
731          return $this;
732      }
733   
734      /**
735       * Whether this definition is abstract, that means it merely serves as a
736       * template for other definitions.
737       *
738       * @return bool
739       */
740      public function isAbstract()
741      {
742          return $this->abstract;
743      }
744   
745      /**
746       * Whether this definition is deprecated, that means it should not be called
747       * anymore.
748       *
749       * @param bool   $status
750       * @param string $template Template message to use if the definition is deprecated
751       *
752       * @return Definition the current instance
753       *
754       * @throws InvalidArgumentException When the message template is invalid.
755       */
756      public function setDeprecated($status = true, $template = null)
757      {
758          if (null !== $template) {
759              if (preg_match('#[\r\n]|\*/#', $template)) {
760                  throw new InvalidArgumentException('Invalid characters found in deprecation template.');
761              }
762   
763              if (false === strpos($template, '%service_id%')) {
764                  throw new InvalidArgumentException('The deprecation template must contain the "%service_id%" placeholder.');
765              }
766   
767              $this->deprecationTemplate = $template;
768          }
769   
770          $this->deprecated = (bool) $status;
771   
772          return $this;
773      }
774   
775      /**
776       * Whether this definition is deprecated, that means it should not be called
777       * anymore.
778       *
779       * @return bool
780       */
781      public function isDeprecated()
782      {
783          return $this->deprecated;
784      }
785   
786      /**
787       * Message to use if this definition is deprecated.
788       *
789       * @param string $id Service id relying on this definition
790       *
791       * @return string
792       */
793      public function getDeprecationMessage($id)
794      {
795          return str_replace('%service_id%', $id, $this->deprecationTemplate);
796      }
797   
798      /**
799       * Sets a configurator to call after the service is fully initialized.
800       *
801       * @param callable $callable A PHP callable
802       *
803       * @return Definition The current instance
804       */
805      public function setConfigurator($callable)
806      {
807          $this->configurator = $callable;
808   
809          return $this;
810      }
811   
812      /**
813       * Gets the configurator to call after the service is fully initialized.
814       *
815       * @return callable|null The PHP callable to call
816       */
817      public function getConfigurator()
818      {
819          return $this->configurator;
820      }
821   
822      /**
823       * Sets types that will default to this definition.
824       *
825       * @param string[] $types
826       *
827       * @return Definition The current instance
828       */
829      public function setAutowiringTypes(array $types)
830      {
831          $this->autowiringTypes = array();
832   
833          foreach ($types as $type) {
834              $this->autowiringTypes[$type] = true;
835          }
836   
837          return $this;
838      }
839   
840      /**
841       * Is the definition autowired?
842       *
843       * @return bool
844       */
845      public function isAutowired()
846      {
847          return $this->autowired;
848      }
849   
850      /**
851       * Sets autowired.
852       *
853       * @param bool $autowired
854       *
855       * @return Definition The current instance
856       */
857      public function setAutowired($autowired)
858      {
859          $this->autowired = $autowired;
860   
861          return $this;
862      }
863   
864      /**
865       * Gets autowiring types that will default to this definition.
866       *
867       * @return string[]
868       */
869      public function getAutowiringTypes()
870      {
871          return array_keys($this->autowiringTypes);
872      }
873   
874      /**
875       * Adds a type that will default to this definition.
876       *
877       * @param string $type
878       *
879       * @return Definition The current instance
880       */
881      public function addAutowiringType($type)
882      {
883          $this->autowiringTypes[$type] = true;
884   
885          return $this;
886      }
887   
888      /**
889       * Removes a type.
890       *
891       * @param string $type
892       *
893       * @return Definition The current instance
894       */
895      public function removeAutowiringType($type)
896      {
897          unset($this->autowiringTypes[$type]);
898   
899          return $this;
900      }
901   
902      /**
903       * Will this definition default for the given type?
904       *
905       * @param string $type
906       *
907       * @return bool
908       */
909      public function hasAutowiringType($type)
910      {
911          return isset($this->autowiringTypes[$type]);
912      }
913  }
914