fix(php): 修复函数use语句解析问题

- 修正useFunctions映射返回值,确保函数名正确拼接
- 修复use语句类型判断逻辑,处理未知类型情况
- 添加any函数polyfill支持
- 新增函数use测试用例验证功能正确性
pull/1/head
韩天峰 4 months ago
parent 935aeb8b1b
commit c4b7e3022a
  1. 5
      examples/error/undef-var.php
  2. 5
      src/Php/CompilerBase.php
  3. 5
      src/polyfills.php
  4. 20
      tests/aot/namespace/use-func.phpt

@ -0,0 +1,5 @@
<?php
function main()
{
var_dump($testVar);
}

@ -705,7 +705,7 @@ class CompilerBase extends \PhpAot\Core\Translator
return ltrim($funcName, '\\'); return ltrim($funcName, '\\');
} }
if (isset($this->useFunctions[$funcName])) { if (isset($this->useFunctions[$funcName])) {
return $this->useFunctions[$funcName]; return $this->useFunctions[$funcName] . '\\' . $funcName;
} }
return $funcName; return $funcName;
} }
@ -4679,7 +4679,8 @@ class CompilerBase extends \PhpAot\Core\Translator
$code = ''; $code = '';
foreach ($v2->uses as $use) { foreach ($v2->uses as $use) {
$id = $this->parseIdentifier($use->name); $id = $this->parseIdentifier($use->name);
if ($use->type === Node\Stmt\Use_::TYPE_FUNCTION) { $type = $use->type !== Node\Stmt\Use_::TYPE_UNKNOWN ? $use->type : $v2->type;
if ($type === Node\Stmt\Use_::TYPE_FUNCTION) {
$lastIndex = strrpos($id, '\\'); $lastIndex = strrpos($id, '\\');
$fn = substr($id, $lastIndex + 1); $fn = substr($id, $lastIndex + 1);
$ns = substr($id, 0, $lastIndex); $ns = substr($id, 0, $lastIndex);

@ -43,3 +43,8 @@ function &refval(&$var)
{ {
return $var; return $var;
} }
function any(mixed $var): mixed
{
return $var;
}

@ -0,0 +1,20 @@
--TEST--
use function
--FILE--
<?php
namespace App\Foo {
function bar() {
var_dump(__FUNCTION__);
}
}
namespace {
use function App\Foo\bar;
function main()
{
bar();
}
}
?>
--EXPECT--
string(11) "App\Foo\bar"
Loading…
Cancel
Save