fix(aot): 处理类常量引用的全限定类名

pull/13/head
韩天峰 2 months ago
parent 2e85940bff
commit 2a75143036
  1. 11
      src/gen_stub.php
  2. 28
      tests/aot/namespace/class-const-use-in-property-default.phpt

@ -41,6 +41,15 @@ function reportFilePutContents(string $filename, string $content): void {
getTranslator()->writeFile($filename, $content);
}
function getClassConstFetchClassName(Expr\ClassConstFetch $expr): string
{
$className = $expr->class->toString();
if ($expr->class instanceof PhpParser\Node\Name\FullyQualified) {
return '\\' . $className;
}
return $className;
}
/**
* @return FileInfo[]
*/
@ -2339,7 +2348,7 @@ class EvaluatedValue
}
if ($expr instanceof Expr\ClassConstFetch) {
$class = $expr->class->toString();
$class = getClassConstFetchClassName($expr);
if ($class === 'self') {
$constName = ClassInfo::$currentClass . "::" . $expr->name->__toString();
if (isset($allConstInfos[$constName])) {

@ -0,0 +1,28 @@
--TEST--
class const from imported global class in property default
--FILE--
<?php
namespace fizz\orm\db {
use PDO;
class PDOConnection
{
public int $fetchMode = PDO::FETCH_ASSOC;
public array $options = [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
}
}
namespace {
function main()
{
$conn = new fizz\orm\db\PDOConnection();
var_dump($conn->fetchMode === \PDO::FETCH_ASSOC);
var_dump($conn->options === [\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC]);
}
}
?>
--EXPECT--
bool(true)
bool(true)
Loading…
Cancel
Save