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


PHP Variable::setMustInitNull方法代碼示例

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


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

示例1: callFromDynamicClassDynamicMethod

 /**
  * Calls static methods on using a dynamic variable as class and a dynamic method
  *
  * @param array $expression
  * @param Variable $symbolVariable
  * @param boolean $mustInit
  * @param boolean $isExpecting
  * @param CompilationContext $compilationContext
  */
 protected function callFromDynamicClassDynamicMethod(array $expression, $symbolVariable, $mustInit, $isExpecting, CompilationContext $compilationContext)
 {
     $codePrinter = $compilationContext->codePrinter;
     /**
      * Call static methods must grown the stack
      */
     $compilationContext->symbolTable->mustGrownStack(true);
     if ($mustInit) {
         $symbolVariable->setMustInitNull(true);
         $symbolVariable->trackVariant($compilationContext);
     }
     $cachePointer = 'NULL';
     if (isset($expression['parameters']) && count($expression['parameters'])) {
         $params = $this->getResolvedParams($expression['parameters'], $compilationContext, $expression);
     } else {
         $params = array();
     }
     /**
      * Obtain the class entry from the variable
      */
     $classNameVariable = $compilationContext->symbolTable->getVariableForRead($expression['class'], $compilationContext, $expression);
     if ($classNameVariable->isNotVariableAndString()) {
         throw new CompilerException("Only dynamic/string variables can be used in dynamic classes", $expression);
     }
     /**
      * @todo Validate if the variable is really a string!
      */
     $classEntryVariable = $compilationContext->symbolTable->addTemp('zend_class_entry', $compilationContext);
     $codePrinter->output($classEntryVariable->getName() . ' = zend_fetch_class(Z_STRVAL_P(' . $classNameVariable->getName() . '), Z_STRLEN_P(' . $classNameVariable->getName() . '), ZEND_FETCH_CLASS_AUTO TSRMLS_CC);');
     $classEntry = $classEntryVariable->getName();
     /**
      * Obtain the method name from the variable
      */
     $methodNameVariable = $compilationContext->symbolTable->getVariableForRead($expression['name'], $compilationContext, $expression);
     if ($methodNameVariable->isNotVariableAndString()) {
         throw new CompilerException("Only dynamic/string variables can be used in dynamic methods", $expression);
     }
     /**
      * @todo Validate if the variable is really a string!
      */
     $methodName = 'Z_STRVAL_P(' . $methodNameVariable->getName() . ')';
     if (!count($params)) {
         if ($isExpecting) {
             if ($symbolVariable->getName() == 'return_value') {
                 $codePrinter->output('ZEPHIR_RETURN_CALL_CE_STATIC(' . $classEntry . ', ' . $methodName . ', ' . $cachePointer . ');');
             } else {
                 $codePrinter->output('ZEPHIR_CALL_CE_STATIC(&' . $symbolVariable->getName() . ', ' . $classEntry . ', ' . $methodName . ', ' . $cachePointer . ');');
             }
         } else {
             $codePrinter->output('ZEPHIR_CALL_CE_STATIC(NULL, ' . $classEntry . ', ' . $methodName . ', ' . $cachePointer . ');');
         }
     } else {
         if ($isExpecting) {
             if ($symbolVariable->getName() == 'return_value') {
                 $codePrinter->output('ZEPHIR_RETURN_CALL_CE_STATIC(' . $classEntry . ', ' . $methodName . ', ' . $cachePointer . ', ' . join(', ', $params) . ');');
             } else {
                 $codePrinter->output('ZEPHIR_CALL_CE_STATIC(&' . $symbolVariable->getName() . ', ' . $classEntry . ', ' . $methodName . ', ' . $cachePointer . ', ' . join(', ', $params) . ');');
             }
         } else {
             $codePrinter->output('ZEPHIR_CALL_CE_STATIC(NULL, ' . $classEntry . ', ' . $methodName . ', ' . $cachePointer . ', ' . join(', ', $params) . ');');
         }
     }
     /**
      * Temporary variables must be copied if they have more than one reference
      */
     foreach ($this->getMustCheckForCopyVariables() as $checkVariable) {
         $codePrinter->output('zephir_check_temp_parameter(' . $checkVariable . ');');
     }
     $this->addCallStatusOrJump($compilationContext);
 }
開發者ID:NumbDai,項目名稱:zephir,代碼行數:79,代碼來源:StaticCall.php

示例2: assign


//.........這裏部分代碼省略.........
                             $compilationContext->headersManager->add('kernel/operators');
                             switch ($statement['operator']) {
                                 case '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);');
開發者ID:NumbDai,項目名稱:zephir,代碼行數:67,代碼來源:Variable.php


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