leilukin-tumbleblog/includes/lib/Twig/Node/Expression/NameExpression.php

108 lines
3.3 KiB
PHP
Raw Normal View History

2024-06-20 14:10:42 +00:00
<?php
/*
* This file is part of Twig.
*
* (c) Fabien Potencier
* (c) Armin Ronacher
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Twig\Node\Expression;
use Twig\Compiler;
class NameExpression extends AbstractExpression
{
private $specialVars = [
'_self' => '$this->getTemplateName()',
'_context' => '$context',
'_charset' => '$this->env->getCharset()',
];
public function __construct(string $name, int $lineno)
{
parent::__construct([], ['name' => $name, 'is_defined_test' => false, 'ignore_strict_check' => false, 'always_defined' => false], $lineno);
}
public function compile(Compiler $compiler): void
{
$name = $this->getAttribute('name');
$compiler->addDebugInfo($this);
if ($this->getAttribute('is_defined_test')) {
2024-09-05 17:51:48 +00:00
if (isset($this->specialVars[$name])) {
2024-06-20 14:10:42 +00:00
$compiler->repr(true);
} elseif (\PHP_VERSION_ID >= 70400) {
$compiler
->raw('array_key_exists(')
->string($name)
->raw(', $context)')
;
} else {
$compiler
->raw('(isset($context[')
->string($name)
->raw(']) || array_key_exists(')
->string($name)
->raw(', $context))')
;
}
2024-09-05 17:51:48 +00:00
} elseif (isset($this->specialVars[$name])) {
2024-06-20 14:10:42 +00:00
$compiler->raw($this->specialVars[$name]);
} elseif ($this->getAttribute('always_defined')) {
$compiler
->raw('$context[')
->string($name)
->raw(']')
;
} else {
if ($this->getAttribute('ignore_strict_check') || !$compiler->getEnvironment()->isStrictVariables()) {
$compiler
->raw('($context[')
->string($name)
->raw('] ?? null)')
;
} else {
$compiler
->raw('(isset($context[')
->string($name)
->raw(']) || array_key_exists(')
->string($name)
->raw(', $context) ? $context[')
->string($name)
->raw('] : (function () { throw new RuntimeError(\'Variable ')
->string($name)
->raw(' does not exist.\', ')
->repr($this->lineno)
->raw(', $this->source); })()')
->raw(')')
;
}
}
}
2024-09-05 17:51:48 +00:00
/**
* @deprecated since Twig 3.11 (to be removed in 4.0)
*/
2024-06-20 14:10:42 +00:00
public function isSpecial()
{
2024-09-05 17:51:48 +00:00
trigger_deprecation('twig/twig', '3.11', 'The "%s()" method is deprecated and will be removed in Twig 4.0.', __METHOD__);
2024-06-20 14:10:42 +00:00
return isset($this->specialVars[$this->getAttribute('name')]);
}
2024-09-05 17:51:48 +00:00
/**
* @deprecated since Twig 3.11 (to be removed in 4.0)
*/
2024-06-20 14:10:42 +00:00
public function isSimple()
{
2024-09-05 17:51:48 +00:00
trigger_deprecation('twig/twig', '3.11', 'The "%s()" method is deprecated and will be removed in Twig 4.0.', __METHOD__);
2024-06-20 14:10:42 +00:00
return !$this->isSpecial() && !$this->getAttribute('is_defined_test');
}
}