Coduo\PHPMatcher\Parser\ExpanderInitializer::initialize PHP Method

initialize() public method

public initialize ( Coduo\PHPMatcher\AST\Expander $expanderNode ) : Coduo\PHPMatcher\Matcher\Pattern\PatternExpander
$expanderNode Coduo\PHPMatcher\AST\Expander
return Coduo\PHPMatcher\Matcher\Pattern\PatternExpander
    public function initialize(Expander $expanderNode)
    {
        if (!array_key_exists($expanderNode->getName(), $this->expanderDefinitions)) {
            throw new UnknownExpanderException(sprintf("Unknown expander \"%s\"", $expanderNode->getName()));
        }
        $reflection = new \ReflectionClass($this->expanderDefinitions[$expanderNode->getName()]);
        if ($expanderNode->hasArguments()) {
            $arguments = array();
            foreach ($expanderNode->getArguments() as $argument) {
                $arguments[] = $argument instanceof Expander ? $this->initialize($argument) : $argument;
            }
            $expander = $reflection->newInstanceArgs($arguments);
        } else {
            $expander = $reflection->newInstance();
        }
        if (!$expander instanceof PatternExpander) {
            throw new InvalidExpanderTypeException();
        }
        return $expander;
    }

Usage Example

Ejemplo n.º 1
0
 /**
  * @param string $pattern
  * @throws UnknownExpanderException
  * @return Pattern\TypePattern
  */
 public function parse($pattern)
 {
     $AST = $this->getAST($pattern);
     $pattern = new Pattern\TypePattern((string) $AST->getType());
     foreach ($AST->getExpanders() as $expander) {
         $pattern->addExpander($this->expanderInitializer->initialize($expander));
     }
     return $pattern;
 }