Nette\DI\PhpGenerator::formatStatement PHP Метод

formatStatement() приватный Метод

Formats PHP code for class instantiating, function calling or property setting in PHP.
private formatStatement ( Statement $statement ) : string
$statement Statement
Результат string
    private function formatStatement(Statement $statement)
    {
        $entity = $statement->getEntity();
        $arguments = $statement->arguments;
        if (is_string($entity) && Strings::contains($entity, '?')) {
            // PHP literal
            return $this->formatPhp($entity, $arguments);
        } elseif ($service = $this->builder->getServiceName($entity)) {
            // factory calling
            return $this->formatPhp('$this->?(?*)', [Container::getMethodName($service), $arguments]);
        } elseif ($entity === 'not') {
            // operator
            return $this->formatPhp('!?', [$arguments[0]]);
        } elseif (is_string($entity)) {
            // class name
            return $this->formatPhp("new {$entity}" . ($arguments ? '(?*)' : ''), [$arguments]);
        } elseif ($entity[0] === '') {
            // globalFunc
            return $this->formatPhp("{$entity['1']}(?*)", [$arguments]);
        } elseif ($entity[0] instanceof Statement) {
            $inner = $this->formatPhp('?', [$entity[0]]);
            if (substr($inner, 0, 4) === 'new ') {
                $inner = "({$inner})";
            }
            return $this->formatPhp("{$inner}->?(?*)", [$entity[1], $arguments]);
        } elseif ($entity[1][0] === '$') {
            // property getter, setter or appender
            $name = substr($entity[1], 1);
            if ($append = substr($name, -2) === '[]') {
                $name = substr($name, 0, -2);
            }
            if ($this->builder->getServiceName($entity[0])) {
                $prop = $this->formatPhp('?->?', [$entity[0], $name]);
            } else {
                $prop = $this->formatPhp($entity[0] . '::$?', [$name]);
            }
            return $arguments ? $this->formatPhp($prop . ($append ? '[]' : '') . ' = ?', [$arguments[0]]) : $prop;
        } elseif ($service = $this->builder->getServiceName($entity[0])) {
            // service method
            return $this->formatPhp('?->?(?*)', [$entity[0], $entity[1], $arguments]);
        } else {
            // static method
            return $this->formatPhp("{$entity['0']}::{$entity['1']}(?*)", [$arguments]);
        }
    }