Zephir\SymbolTable::getVariableForWrite PHP Method

getVariableForWrite() public method

Return a variable in the symbol table, it will be used for a write operation Some variables aren't writable themselves but their members do
public getVariableForWrite ( string $name, zephir\CompilationContext $compilationContext, array $statement = null ) : boolean | Variable
$name string
$compilationContext zephir\CompilationContext
$statement array
return boolean | Variable
    public function getVariableForWrite($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->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
         */
        if (!$compilationContext->insideCycle) {
            $variable->setUsed(false, $statement);
        } else {
            $variable->setUsed(true, $statement);
        }
        return $variable;
    }