From 989395d7e1c8843038f1834fdf501a5ed24d1e53 Mon Sep 17 00:00:00 2001 From: tianfenghan Date: Thu, 18 Jun 2026 18:07:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(php):=20=E4=BF=AE=E5=A4=8D=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E6=AF=94=E8=BE=83=E7=9A=84=E5=A4=A7=E5=B0=8F=E5=86=99?= =?UTF-8?q?=E6=95=8F=E6=84=9F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 isScalarBool 方法使用 strtolower 进行不区分大小写的布尔值比较 - 修改 getBoolValue 方法使用 strcasecmp 替代严格相等比较 - 修改 isNull 方法使用 strcasecmp 进行不区分大小写的 null 比较 - 在 getConstantValue 中使用 strcasecmp 替代严格相等比较 - 在 getTypeFromConstant 中使用 strcasecmp 替行不区分大小写的布尔值检查 - 添加对函数内部声明函数的错误检查 - 添加测试用例验证布尔数组排序功能 --- src/Php/AstNodeType.php | 6 +++--- src/Php/CompilerBase.php | 13 ++++++++----- tests/aot/array/008.phpt | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 tests/aot/array/008.phpt diff --git a/src/Php/AstNodeType.php b/src/Php/AstNodeType.php index 8c651d11..a1aac1b9 100644 --- a/src/Php/AstNodeType.php +++ b/src/Php/AstNodeType.php @@ -102,12 +102,12 @@ trait AstNodeType protected function isScalarBool(NodeAbstract $expr): bool { - return $expr instanceof Expr\ConstFetch and in_array($expr->name->toString(), ['true', 'false']); + return $expr instanceof Expr\ConstFetch and in_array(strtolower($expr->name->toString()), ['true', 'false']); } protected function getBoolValue(Expr\ConstFetch $expr): string { - return $expr->name->toString() === 'true' ? self::VALUE_TRUE : self::VALUE_FALSE; + return strcasecmp($expr->name->toString(), 'true') === 0 ? self::VALUE_TRUE : self::VALUE_FALSE; } protected function isMatchExpr(NodeAbstract $expr): bool @@ -175,6 +175,6 @@ trait AstNodeType protected function isNull(NodeAbstract $expr): bool { - return $expr instanceof Expr\ConstFetch && $expr->name->toString() === 'null'; + return $expr instanceof Expr\ConstFetch && strcasecmp($expr->name->toString(), 'null') === 0; } } diff --git a/src/Php/CompilerBase.php b/src/Php/CompilerBase.php index aec62adb..11db8417 100644 --- a/src/Php/CompilerBase.php +++ b/src/Php/CompilerBase.php @@ -1419,6 +1419,9 @@ class CompilerBase extends \PhpAot\Core\Translator case 'Stmt_Class': $this->fatalError($v, 'Cannot declare class in function'); break; + case 'Stmt_Function': + $this->fatalError($v, 'Cannot declare function in function'); + break; default: abort($v); break; @@ -3550,13 +3553,13 @@ class CompilerBase extends \PhpAot\Core\Translator return $this->getConstant($importedName); } } - if ($name === 'null') { + if (strcasecmp($name, 'null') === 0) { return self::VALUE_NULL; } - if ($name === 'true') { + if (strcasecmp($name, 'true') === 0) { return 'true'; } - if ($name === 'false') { + if (strcasecmp($name, 'false') === 0) { return 'false'; } if ($name === 'PHP_EOL') { @@ -4151,10 +4154,10 @@ class CompilerBase extends \PhpAot\Core\Translator if ($this->isInternalConstant($name)) { return $this->getTypeFromZendType(gettype($this->internalConstants[$name])); } - if ($name === 'true') { + if (strcasecmp($name, 'true') === 0) { return self::TYPE_BOOL; } - if ($name === 'false') { + if (strcasecmp($name, 'false') === 0) { return self::TYPE_BOOL; } if ($name === 'NAN' or $name === 'INF') { diff --git a/tests/aot/array/008.phpt b/tests/aot/array/008.phpt new file mode 100644 index 00000000..b3594e05 --- /dev/null +++ b/tests/aot/array/008.phpt @@ -0,0 +1,17 @@ +--TEST-- +Array 007 +--FILE-- + true, false => false, TRUE => TRUE, FALSE => FALSE); +$temp_array = $bool_values; +var_dump(krsort($temp_array) ); +var_dump($temp_array); +?> +--EXPECT-- +bool(true) +array(2) { + [1]=> + bool(true) + [0]=> + bool(false) +} \ No newline at end of file