当前位置: 首页>>代码示例>>PHP>>正文


PHP Variable::setDynamicTypes方法代码示例

本文整理汇总了PHP中Zephir\Variable::setDynamicTypes方法的典型用法代码示例。如果您正苦于以下问题:PHP Variable::setDynamicTypes方法的具体用法?PHP Variable::setDynamicTypes怎么用?PHP Variable::setDynamicTypes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Zephir\Variable的用法示例。


在下文中一共展示了Variable::setDynamicTypes方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: 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

示例2: assign


//.........这里部分代码省略.........
                                     $codePrinter->output($variable . ' = zephir_get_numberval(' . $itemVariable->getName() . ');');
                                     break;
                                 case 'add-assign':
                                     $codePrinter->output($variable . ' += zephir_get_numberval(' . $itemVariable->getName() . ');');
                                     break;
                                 case 'sub-assign':
                                     $codePrinter->output($variable . ' -= zephir_get_numberval(' . $itemVariable->getName() . ');');
                                     break;
                                 case 'mul-assign':
                                     $codePrinter->output($variable . ' *= zephir_get_numberval(' . $itemVariable->getName() . ');');
                                     break;
                                 default:
                                     throw new CompilerException("Operator '" . $statement['operator'] . "' is not supported for variable type: double", $statement);
                             }
                             break;
                         default:
                             throw new CompilerException("Unknown type: " . $itemVariable->getType(), $statement);
                     }
                     break;
                 default:
                     throw new CompilerException("Unknown type " . $resolvedExpr->getType(), $statement);
             }
             break;
         case 'array':
             switch ($resolvedExpr->getType()) {
                 case 'variable':
                 case 'array':
                     switch ($statement['operator']) {
                         case 'assign':
                             if ($variable != $resolvedExpr->getCode()) {
                                 $symbolVariable->setMustInitNull(true);
                                 $compilationContext->symbolTable->mustGrownStack(true);
                                 /* Inherit the dynamic type data from the assigned value */
                                 $symbolVariable->setDynamicTypes('array');
                                 $codePrinter->output('ZEPHIR_CPY_WRT(' . $variable . ', ' . $resolvedExpr->getCode() . ');');
                             }
                             break;
                         default:
                             throw new CompilerException("Operator '" . $statement['operator'] . "' is not supported for variable type: " . $resolvedExpr->getType(), $resolvedExpr->getOriginal());
                     }
                     break;
                 default:
                     throw new CompilerException("You cannot {$statement['operator']} {$resolvedExpr->getType()} for array type", $resolvedExpr->getOriginal());
             }
             break;
         case 'string':
             switch ($resolvedExpr->getType()) {
                 case 'null':
                     switch ($statement['operator']) {
                         case 'assign':
                             $symbolVariable->initVariant($compilationContext);
                             $codePrinter->output('ZVAL_EMPTY_STRING(' . $variable . ');');
                             break;
                         default:
                             throw new CompilerException("Operator '" . $statement['operator'] . "' is not supported for variable type: string", $statement);
                     }
                     break;
                 case 'string':
                     switch ($statement['operator']) {
                         case 'assign':
                             $symbolVariable->initVariant($compilationContext);
                             if ($resolvedExpr->getCode()) {
                                 $codePrinter->output('ZVAL_STRING(' . $variable . ', "' . $resolvedExpr->getCode() . '", 1);');
                             } else {
                                 $codePrinter->output('ZVAL_EMPTY_STRING(' . $variable . ');');
                             }
开发者ID:NumbDai,项目名称:zephir,代码行数:67,代码来源:Variable.php

示例3: 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::setDynamicTypes方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。