/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Component/ExpressionLanguage/Compiler.php
134 строки
3 KB
Christian Flothmann
Merge branch '6.4' into 7.3
12 ноя 2025, 18:21
12 ноя 2025, 18:21
4705627
Код
Авторство
О чём код?
<?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\ExpressionLanguage; use Symfony\Contracts\Service\ResetInterface; /** * Compiles a node to PHP code. * * @author Fabien Potencier <fabien@symfony.com> */ class Compiler implements ResetInterface { private string $source = ''; public function __construct( private array $functions, ) { } public function getFunction(string $name): array { return $this->functions[$name]; } /** * Gets the current PHP code after compilation. */ public function getSource(): string { return $this->source; } /** * @return $this */ public function reset(): static { $this->source = ''; return $this; } /** * Compiles a node. * * @return $this */ public function compile(Node\Node $node): static { $node->compile($this); return $this; } public function subcompile(Node\Node $node): string { $current = $this->source; $this->source = ''; $node->compile($this); $source = $this->source; $this->source = $current; return $source; } /** * Adds a raw string to the compiled code. * * @return $this */ public function raw(string $string): static { $this->source .= $string; return $this; } /** * Adds a quoted string to the compiled code. * * @return $this */ public function string(string $value): static { $this->source .= \sprintf('"%s"', addcslashes($value, "\0\t\"\$\\")); return $this; } /** * Returns a PHP representation of a given value. * * @return $this */ public function repr(mixed $value): static { if (\is_int($value) || \is_float($value)) { $this->raw(var_export($value, true)); } elseif (null === $value) { $this->raw('null'); } elseif (\is_bool($value)) { $this->raw($value ? 'true' : 'false'); } elseif (\is_array($value)) { $this->raw('['); $first = true; foreach ($value as $key => $value) { if (!$first) { $this->raw(', '); } $first = false; $this->repr($key); $this->raw(' => '); $this->repr($value); } $this->raw(']'); } else { $this->string($value); } return $this; } }