From b8897319cb4fb8c5f845223a14e81ebbc91f3bb8 Mon Sep 17 00:00:00 2001 From: tianfenghan Date: Tue, 14 Apr 2026 16:56:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(php):=20=E4=BF=AE=E5=A4=8D=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=E5=AD=97=E9=9D=A2=E9=87=8F=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AF=BC=E8=87=B4eval=E5=87=BD=E6=95=B0=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 禁用eval函数中PHP代码段的字面量字符串优化 - 添加noLiteralString属性标记避免优化器错误处理 - 修改编译器基类中字符串解析逻辑以支持条件优化控制 --- .php-cs-fixer.dist.php | 2 +- src/Php/CompilerBase.php | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 3c8f4ecf..11fdaf94 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -47,7 +47,7 @@ return (new PhpCsFixer\Config()) 'phpdoc_types_order' => ['sort_algorithm' => 'none', 'null_adjustment' => 'always_last'], 'phpdoc_separation' => false, 'phpdoc_summary' => false, - 'ordered_class_elements' => true, + 'ordered_class_elements' => false, 'ordered_imports' => ['imports_order' => ['class', 'function', 'const'], 'sort_algorithm' => 'alpha'], 'ordered_types' => ['null_adjustment' => 'always_last', 'sort_algorithm' => 'none'], 'single_line_comment_style' => ['comment_types' => []], diff --git a/src/Php/CompilerBase.php b/src/Php/CompilerBase.php index b21aa500..6eb8500a 100644 --- a/src/Php/CompilerBase.php +++ b/src/Php/CompilerBase.php @@ -902,7 +902,7 @@ class CompilerBase extends \PhpAot\Core\Translator case 'Scalar_Float': return $this->parseScalarFloat($expr); case 'Scalar_String': - return $this->getLiteralString($expr->value); + return $expr->hasAttribute('noLiteralString') ? $this->genCharPtr($expr->value) : $this->getLiteralString($expr->value); default: abort($expr); } @@ -3549,6 +3549,8 @@ class CompilerBase extends \PhpAot\Core\Translator protected function parseEval(Expr\Eval_ $expr): string { + // 对 eval() 指令的 PHP 代码段禁止字面量优化 + $expr->expr->setAttribute('noLiteralString', true); return 'php::eval(' . $this->parseIdentifier($expr->expr) . ')'; }