for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
/*
*
* (c) Yaroslav Honcharuk <[email protected]>
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Yarhon\RouteGuardBundle\Twig\NodeVisitor;
/**
* Modified version of \Symfony\Bridge\Twig\NodeVisitor\Scope.
* @author Jean-François Simon <[email protected]>
* @author Yaroslav Honcharuk <[email protected]>
class Scope
{
* @var self
private $parent;
* @var array
private $data = [];
* @var bool
private $left = false;
* @param self|null $parent
public function __construct(self $parent = null)
$this->parent = $parent;
}
* Opens a new child scope.
* @return self
public function enter()
return new self($this);
* Closes current scope and returns parent one.
* @return self|null
public function leave()
$this->left = true;
return $this->parent;
* Stores data into current scope.
* @param string $key
* @param mixed $value
* @return $this
* @throws \LogicException
public function set($key, $value)
if ($this->left) {
throw new \LogicException('Left scope is not mutable.');
$this->data[$key] = $value;
return $this;
* Tests if a data is visible from current scope.
* @return bool
public function has($key)
if (array_key_exists($key, $this->data)) {
return true;
return false;
* Returns data visible from current scope.
* @param mixed $default
* @return mixed
public function get($key, $default = null)
return $this->data[$key];
return $default;