當前位置: 首頁>>代碼示例>>PHP>>正文


PHP Variable::setIsInitialized方法代碼示例

本文整理匯總了PHP中Zephir\Variable::setIsInitialized方法的典型用法代碼示例。如果您正苦於以下問題:PHP Variable::setIsInitialized方法的具體用法?PHP Variable::setIsInitialized怎麽用?PHP Variable::setIsInitialized使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在Zephir\Variable的用法示例。


在下文中一共展示了Variable::setIsInitialized方法的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。

示例1: assign

 /**
  * Compiles foo = {expr}
  * Changes the value of a mutable variable
  *
  * @param string $variable
  * @param ZephirVariable $symbolVariable
  * @param CompiledExpression $resolvedExpr
  * @param ReadDetector $readDetector
  * @param CompilationContext $compilationContext
  * @param array $statement
  * @throws CompilerException
  */
 public function assign($variable, ZephirVariable $symbolVariable, CompiledExpression $resolvedExpr, ReadDetector $readDetector, CompilationContext $compilationContext, array $statement)
 {
     if ($symbolVariable->isReadOnly()) {
         throw new CompilerException("Cannot mutate variable '" . $variable . "' because it is read only", $statement);
     }
     $codePrinter = $compilationContext->codePrinter;
     /**
      * Only initialize variables if it's direct assignment
      */
     if ($statement['operator'] == 'assign') {
         $symbolVariable->setIsInitialized(true, $compilationContext, $statement);
     } else {
         if (!$symbolVariable->isInitialized()) {
             throw new CompilerException("Cannot mutate variable '" . $variable . "' because it is not initialized", $statement);
         }
     }
     /**
      * Set the assigned value to the variable as a CompiledExpression
      * We could use this expression for further analysis
      */
     $symbolVariable->setPossibleValue($resolvedExpr, $compilationContext);
     $type = $symbolVariable->getType();
     switch ($type) {
         case 'int':
         case 'uint':
         case 'long':
         case 'ulong':
         case 'char':
         case 'uchar':
             $this->doNumericAssignment($codePrinter, $resolvedExpr, $symbolVariable, $variable, $statement, $compilationContext);
             break;
         case 'double':
             $this->doDoubleAssignment($codePrinter, $resolvedExpr, $symbolVariable, $variable, $statement, $compilationContext);
             break;
         case 'array':
             $this->doArrayAssignment($codePrinter, $resolvedExpr, $symbolVariable, $variable, $statement, $compilationContext);
             break;
         case 'string':
             $this->doStringAssignment($codePrinter, $resolvedExpr, $symbolVariable, $variable, $statement, $compilationContext);
             break;
         case 'bool':
             $this->doBoolAssignment($codePrinter, $resolvedExpr, $symbolVariable, $variable, $statement, $compilationContext);
             break;
         case 'variable':
             $this->doVariableAssignment($codePrinter, $resolvedExpr, $symbolVariable, $variable, $statement, $compilationContext, $readDetector);
             break;
         default:
             throw new CompilerException("Unknown type: " . $type, $statement);
     }
 }
開發者ID:edin,項目名稱:zephir,代碼行數:62,代碼來源:Variable.php

示例2: addCallStatusFlag

 /**
  * Add the last-call-status flag to the current symbol table
  *
  * @param CompilationContext $compilationContext
  */
 public function addCallStatusFlag(CompilationContext $compilationContext)
 {
     if (!$compilationContext->symbolTable->hasVariable('ZEPHIR_LAST_CALL_STATUS')) {
         $callStatus = new Variable('int', 'ZEPHIR_LAST_CALL_STATUS', $compilationContext->currentBranch);
         $callStatus->setIsInitialized(true, $compilationContext, array());
         $callStatus->increaseUses();
         $callStatus->setReadOnly(true);
         $compilationContext->symbolTable->addRawVariable($callStatus);
     }
 }
開發者ID:chet0xhenry,項目名稱:zephir,代碼行數:15,代碼來源:Call.php

示例3: getVariableForUpdate

 /**
  * 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
  *
  * @param string $name
  * @param CompilationContext $compilationContext
  * @param array $statement
  * @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->variables[$name] = $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;
 }
開發者ID:Jvbzephir,項目名稱:zephir,代碼行數:44,代碼來源:SymbolTable.php

示例4: assign

 /**
  * Compiles foo = {expr}
  * Changes the value of a mutable variable
  *
  * @param $variable
  * @param Variable $symbolVariable
  * @param CompiledExpression $resolvedExpr
  * @param ReadDetector $readDetector
  * @param CompilationContext $compilationContext
  * @param $statement
  * @throws CompilerException
  */
 public function assign($variable, ZephirVariable $symbolVariable, CompiledExpression $resolvedExpr, ReadDetector $readDetector, CompilationContext $compilationContext, $statement)
 {
     if ($symbolVariable->isReadOnly()) {
         throw new CompilerException("Cannot mutate variable '" . $variable . "' because it is read only", $statement);
     }
     $codePrinter = $compilationContext->codePrinter;
     /**
      * Only initialize variables if it's direct assignment
      */
     if ($statement['operator'] == 'assign') {
         $symbolVariable->setIsInitialized(true, $compilationContext, $statement);
     } else {
         if (!$symbolVariable->isInitialized()) {
             throw new CompilerException("Cannot mutate variable '" . $variable . "' because it is not initialized", $statement);
         }
     }
     /**
      * Set the assigned value to the variable as a CompiledExpression
      * We could use this expression for further analysis
      */
     $symbolVariable->setPossibleValue($resolvedExpr, $compilationContext);
     $type = $symbolVariable->getType();
     switch ($type) {
         case 'int':
         case 'uint':
         case 'long':
         case 'ulong':
         case 'char':
         case 'uchar':
             switch ($resolvedExpr->getType()) {
                 case 'null':
                     switch ($statement['operator']) {
                         case 'assign':
                             $codePrinter->output($variable . ' = 0;');
                             break;
                         case 'add-assign':
                             $codePrinter->output($variable . ' += 0;');
                             break;
                         case 'sub-assign':
                             $codePrinter->output($variable . ' -= 0;');
                             break;
                         case 'mul-assign':
                             $codePrinter->output($variable . ' *= 0;');
                             break;
                         default:
                             throw new CompilerException("Operator '" . $statement['operator'] . "' is not supported for variable type: int", $statement);
                     }
                     break;
                 case 'int':
                 case 'uint':
                 case 'long':
                 case 'ulong':
                     switch ($statement['operator']) {
                         case 'assign':
                             $codePrinter->output($variable . ' = ' . $resolvedExpr->getCode() . ';');
                             break;
                         case 'add-assign':
                             $codePrinter->output($variable . ' += ' . $resolvedExpr->getCode() . ';');
                             break;
                         case 'sub-assign':
                             $codePrinter->output($variable . ' -= ' . $resolvedExpr->getCode() . ';');
                             break;
                         case 'mul-assign':
                             $codePrinter->output($variable . ' *= ' . $resolvedExpr->getCode() . ';');
                             break;
                         case 'div-assign':
                             $codePrinter->output($variable . ' /= ' . $resolvedExpr->getCode() . ';');
                             break;
                         case 'mod-assign':
                             $codePrinter->output($variable . ' %= ' . $resolvedExpr->getCode() . ';');
                             break;
                         default:
                             throw new CompilerException("Operator '" . $statement['operator'] . "' is not supported for variable type: int", $statement);
                     }
                     break;
                 case 'char':
                 case 'uchar':
                     switch ($statement['operator']) {
                         case 'assign':
                             $codePrinter->output($variable . ' = \'' . $resolvedExpr->getCode() . '\';');
                             break;
                         case 'add-assign':
                             $codePrinter->output($variable . ' += \'' . $resolvedExpr->getCode() . '\';');
                             break;
                         case 'sub-assign':
                             $codePrinter->output($variable . ' -= \'' . $resolvedExpr->getCode() . '\';');
                             break;
                         case 'mul-assign':
//.........這裏部分代碼省略.........
開發者ID:NumbDai,項目名稱:zephir,代碼行數:101,代碼來源:Variable.php

示例5: getVariableForWrite

 /**
  * 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
  * @return Variable
  */
 public function getVariableForWrite($name, $compilationContext, $statement = null)
 {
     /**
      * Create superglobals just in time
      */
     if ($this->isSuperGlobal($name)) {
         if (!$this->hasVariable($name)) {
             /**
              * @TODO, injecting globals, initialize to null and check first?
              */
             $compilationContext->codePrinter->output('zephir_get_global(&' . $name . ', SS("' . $name . '") TSRMLS_CC);');
             $superVar = new Variable('variable', $name, $compilationContext->currentBranch);
             $superVar->setIsInitialized(true, $compilationContext, $statement);
             $superVar->setDynamicTypes('array');
             $superVar->increaseMutates();
             $superVar->increaseUses();
             $this->_variables[$name] = $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();
     return $variable;
 }
開發者ID:NumbDai,項目名稱:zephir,代碼行數:37,代碼來源:SymbolTable.php


注:本文中的Zephir\Variable::setIsInitialized方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。