允许类方法的默认参数使用类常量

pull/1/head
韩天峰 3 months ago
parent d73d077a7a
commit fb458405b8
  1. 6
      src/Php/CompilerBase.php
  2. 6
      src/gen_stub.php
  3. 22
      tests/aot/self-class/002.phpt

@ -1423,9 +1423,9 @@ class CompilerBase extends \PhpAot\Core\Translator
$list = [];
$list[] = $this->getIndent() . $tmpVar . ' = ' . $this->parseExpr($next);
$right = new Variable($tmpVar);
$rightVar = new Variable($tmpVar);
foreach ($chain as $var) {
$list[] = $this->getIndent() . $this->parseAssignFinally($var, $right);
$list[] = $this->getIndent() . $this->parseAssignFinally($var, $rightVar);
}
return implode(";\n" . $this->getIndent(), $list);
@ -2349,7 +2349,7 @@ class CompilerBase extends \PhpAot\Core\Translator
}
$class = '';
$type = $this->parseTypeDecl($param->type, self::DECL_TYPE_OF_PARAM, $class);
if ($class) {
if ($class and !$this->hasInterface($class) and !$this->isAbstractClass($class)) {
$this->addObject($var, $class);
$argInfo->class = $class;
}

@ -4866,7 +4866,9 @@ function parseFunctionLike(
}
if ($param->default instanceof Expr\ClassConstFetch && $param->default->class->toLowerString() === "self") {
throw new Exception('The exact class name must be used instead of "self"');
$defaultValue = getTranslator()->getClassConstValue($func, $name->className->name, $param->default->name->name);
} else {
$defaultValue = $param->default ? $prettyPrinter->prettyPrintExpr($param->default) : null;
}
$foundVariadic = $param->variadic;
@ -4877,7 +4879,7 @@ function parseFunctionLike(
$param->variadic,
$type,
isset($docParamTypes[$varName]) ? Type::fromString($docParamTypes[$varName]) : null,
$param->default ? $prettyPrinter->prettyPrintExpr($param->default) : null,
$defaultValue,
AttributeInfo::createFromGroups($param->attrGroups)
);
if (!$param->default && !$param->variadic) {

@ -0,0 +1,22 @@
--TEST--
self class
--FILE--
<?php
class EvaluatedValue
{
const TYPE = 'string';
public function run(string $value, string $type = self::TYPE)
{
var_dump($value);
var_dump($type);
}
}
function main() {
$obj = new EvaluatedValue;
$obj->run('null');
}
?>
--EXPECT--
string(4) "null"
string(6) "string"
Loading…
Cancel
Save