Zephir\SymbolTable::getVariableForUpdate PHP Method

getVariableForUpdate() public method

Return a variable in the symbol table, it will be used for a mutating operation This method implies mutation of one of the members of the variable but no the variables it self
public getVariableForUpdate ( string $name, zephir\CompilationContext $compilationContext, array $statement = null ) : Variable
$name string
$compilationContext zephir\CompilationContext
$statement array
return Variable
    public function getVariableForUpdate($name, CompilationContext $compilationContext, array $statement = null)
    {
        /**
         * Create superglobals just in time
         */
        if ($this->isSuperGlobal($name)) {
            if (!$this->hasVariable($name)) {
                /**
                 * @TODO, injecting globals, initialize to null and check first?
                 */
                $superVar = new Variable('variable', $name, $compilationContext->currentBranch);
                $superVar->setIsInitialized(true, $compilationContext, $statement);
                $superVar->setDynamicTypes('array');
                $superVar->increaseMutates();
                $superVar->increaseUses();
                $superVar->setIsExternal(true);
                $superVar->setUsed(true, $statement);
                $this->addRawVariable($superVar);
                return $superVar;
            }
        }
        if (!$this->hasVariable($name)) {
            throw new CompilerException("Cannot mutate variable '" . $name . "' because it wasn't defined", $statement);
        }
        $variable = $this->getVariable($name);
        $variable->increaseUses();
        $variable->increaseMutates();
        /**
         * Saves the last place where the variable was mutated
         * We discard mutations inside loops because iterations could use the value
         * and Zephir only provides top-down compilation
         */
        $variable->setUsed(true, $statement);
        return $variable;
    }