|
|
|
|
@ -1804,6 +1804,18 @@ class CompilerBase extends \PhpAot\Core\Translator |
|
|
|
|
if (isset($this->useFunctions[$fname])) { |
|
|
|
|
$possibleFunctionNames[] = $this->escapeNamespace($this->useFunctions[$fname]) . self::NAMESPACE_SEPARATOR . $fname; |
|
|
|
|
} |
|
|
|
|
// 复杂命名空间规则,组合命名空间 |
|
|
|
|
// 例子:use foo\bar; bar\fn(); |
|
|
|
|
foreach ($this->useNamespaces as $use) { |
|
|
|
|
$ns1 = explode('\\', $use); |
|
|
|
|
$ns2 = explode('\\', $fname); |
|
|
|
|
if ($ns1[array_key_last($ns1)] === $ns2[array_key_first($ns2)]) { |
|
|
|
|
$ns = array_merge($ns1, $ns2); |
|
|
|
|
array_splice($ns, array_key_last($ns1) + 1); |
|
|
|
|
$possibleFunctionNames[] = $this->escapeNamespace(implode('\\', $ns)); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
foreach ($possibleFunctionNames as $name) { |
|
|
|
|
// 在预处理阶段检测到函数声明,但是未定义,说明在当前文件,但是顺序错误 |
|
|
|
|
// 跳过,稍后再处理 |
|
|
|
|
@ -2373,6 +2385,11 @@ class CompilerBase extends \PhpAot\Core\Translator |
|
|
|
|
return str_replace('\\', self::NAMESPACE_SEPARATOR, strtolower($ns)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected function escapeZendFnName(string $fn): string |
|
|
|
|
{ |
|
|
|
|
return str_replace('\\', '_', strtolower($fn)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected function escapeName(string $name): string |
|
|
|
|
{ |
|
|
|
|
return strtolower($name); |
|
|
|
|
|