本文整理汇总了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);
}
示例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);');