Library/SymbolTable.php
public function getVariableForWrite($name, CompilationContext $compilationContext, array $statement = null)
    {
        /*
         * Create superglobals just in time
         */
        if ($this->globalsManager->isSuperGlobal($name)) {
            if (!$this->hasVariable($name)) {
                /**
                 * @TODO, injecting globals, initialize to null and check first?
                 */
                $superVar = new Variable('variable', $name, $compilationContext->branchManager->getCurrentBranch());
                $superVar->setIsInitialized(true, $compilationContext);
                $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
         */
        if (!$compilationContext->insideCycle) {
            $variable->setUsed(false, $statement);
        } else {
            $variable->setUsed(true, $statement);
        }

        return $variable;
    }
public function getVariableForWrite($name, CompilationContext $compilationContext, array $statement = null)
    {
        /*
         * Create superglobals just in time
         */
        if ($this->globalsManager->isSuperGlobal($name)) {
            if (!$this->hasVariable($name)) {
                /**
                 * @TODO, injecting globals, initialize to null and check first?
                 */
                $superVar = new Variable('variable', $name, $compilationContext->branchManager->getCurrentBranch());
                $superVar->setIsInitialized(true, $compilationContext);
                $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
         */
        if (!$compilationContext->insideCycle) {
            $variable->setUsed(false, $statement);
        } else {
            $variable->setUsed(true, $statement);
        }

        return $variable;
    }
public function getVariableForWrite ( $ name , CompilationContext $ compilationContext , array $ statement = null ) { /*
         * Create superglobals just in time
         */ if ( $ this -> globalsManager -> isSuperGlobal ( $ name ) ) { if ( ! $ this -> hasVariable ( $ name ) ) { /**
                 * @TODO, injecting globals, initialize to null and check first?
                 */ $ superVar = new Variable ( 'variable' , $ name , $ compilationContext -> branchManager -> getCurrentBranch ( ) ) ; $ superVar -> setIsInitialized ( true , $ compilationContext ) ; $ 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
         */ if ( ! $ compilationContext -> insideCycle ) { $ variable -> setUsed ( false , $ statement ) ; } else { $ variable -> setUsed ( true , $ statement ) ; } return $ variable ; }
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.

@param string             $name
@param CompilationContext $compilationContext
@param array              $statement

@throws CompilerException

@return bool|\Zephir\Variable
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 .