96 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| /*
 | |
|  * This file is part of the Symfony package.
 | |
|  *
 | |
|  * (c) Fabien Potencier <fabien@symfony.com>
 | |
|  *
 | |
|  * For the full copyright and license information, please view the LICENSE
 | |
|  * file that was distributed with this source code.
 | |
|  */
 | |
| 
 | |
| namespace Symfony\Component\DependencyInjection;
 | |
| 
 | |
| use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
 | |
| use Symfony\Component\DependencyInjection\Exception\OutOfBoundsException;
 | |
| 
 | |
| /**
 | |
|  * This definition extends another definition.
 | |
|  *
 | |
|  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
 | |
|  */
 | |
| class ChildDefinition extends Definition
 | |
| {
 | |
|     private string $parent;
 | |
| 
 | |
|     /**
 | |
|      * @param string $parent The id of Definition instance to decorate
 | |
|      */
 | |
|     public function __construct(string $parent)
 | |
|     {
 | |
|         $this->parent = $parent;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns the Definition to inherit from.
 | |
|      */
 | |
|     public function getParent(): string
 | |
|     {
 | |
|         return $this->parent;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Sets the Definition to inherit from.
 | |
|      *
 | |
|      * @return $this
 | |
|      */
 | |
|     public function setParent(string $parent): static
 | |
|     {
 | |
|         $this->parent = $parent;
 | |
| 
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Gets an argument to pass to the service constructor/factory method.
 | |
|      *
 | |
|      * If replaceArgument() has been used to replace an argument, this method
 | |
|      * will return the replacement value.
 | |
|      *
 | |
|      * @throws OutOfBoundsException When the argument does not exist
 | |
|      */
 | |
|     public function getArgument(int|string $index): mixed
 | |
|     {
 | |
|         if (\array_key_exists('index_'.$index, $this->arguments)) {
 | |
|             return $this->arguments['index_'.$index];
 | |
|         }
 | |
| 
 | |
|         return parent::getArgument($index);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * You should always use this method when overwriting existing arguments
 | |
|      * of the parent definition.
 | |
|      *
 | |
|      * If you directly call setArguments() keep in mind that you must follow
 | |
|      * certain conventions when you want to overwrite the arguments of the
 | |
|      * parent definition, otherwise your arguments will only be appended.
 | |
|      *
 | |
|      * @return $this
 | |
|      *
 | |
|      * @throws InvalidArgumentException when $index isn't an integer
 | |
|      */
 | |
|     public function replaceArgument(int|string $index, mixed $value): static
 | |
|     {
 | |
|         if (\is_int($index)) {
 | |
|             $this->arguments['index_'.$index] = $value;
 | |
|         } elseif (str_starts_with($index, '$')) {
 | |
|             $this->arguments[$index] = $value;
 | |
|         } else {
 | |
|             throw new InvalidArgumentException('The argument must be an existing index or the name of a constructor\'s parameter.');
 | |
|         }
 | |
| 
 | |
|         return $this;
 | |
|     }
 | |
| }
 |