- 新增 CompactTest 类测试 compact('this') 在不同上下文中的行为
- 添加 CountGlobalsTest 类测试优化器路径中未定义变量检测逻辑
- 实现 globals 数组访问形式的编译通过验证
- 补充 optimizer-undefined-var.php 测试文件验证错误回退机制
- 添加 globals-array-access.php 测试文件验证数组访问正常编译
- 创建 global.php 示例文件展示全局变量使用方式
pull/3/head
parent
57517381a1
commit
785d9c9d6d
5 changed files with 84 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||||||
|
<?php |
||||||
|
$a = 1234; |
||||||
|
$b = "hello"; |
||||||
|
$_POST['key'] = random_int(1, PHP_INT_MAX); |
||||||
|
var_dump($GLOBALS); |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
<?php |
||||||
|
function main() |
||||||
|
{ |
||||||
|
$GLOBALS['test_key'] = 'hello'; |
||||||
|
var_dump($GLOBALS['test_key']); |
||||||
|
} |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
<?php |
||||||
|
function main() |
||||||
|
{ |
||||||
|
var_dump(in_array($key, $array)); |
||||||
|
} |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
use PhpAot\Php\CompilerTest; |
||||||
|
use PhpAot\Php\Exception\TestError; |
||||||
|
|
||||||
|
class CompactTest extends \BaseTest |
||||||
|
{ |
||||||
|
public function testCompactThisOutsideClass(): void |
||||||
|
{ |
||||||
|
$this->exec( |
||||||
|
'Cannot use compact("this") outside of class method', |
||||||
|
'compact-this-outside-class.php' |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function testCompactThisInsideClass(): void |
||||||
|
{ |
||||||
|
$testFile = __DIR__ . '/../code/compact-this-inside-class.php'; |
||||||
|
$compiler = CompilerTest::create(ROOT_PATH); |
||||||
|
$compiler->addFiles([$testFile]); |
||||||
|
$compiler->prepareFile($testFile); |
||||||
|
$compiler->convertFile($testFile); |
||||||
|
|
||||||
|
$this->assertTrue(true); // 无异常即通过 |
||||||
|
} |
||||||
|
|
||||||
|
public function testCompactThisMixedContext(): void |
||||||
|
{ |
||||||
|
// compact('this') 在类方法内可通过,在普通函数内应 fatal |
||||||
|
$this->exec( |
||||||
|
'Cannot use compact("this") outside of class method', |
||||||
|
'compact_no_this.php' |
||||||
|
); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,33 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
use PhpAot\Php\CompilerTest; |
||||||
|
|
||||||
|
/** |
||||||
|
* 从 count-globals.php 拆解的测试用例: |
||||||
|
* - 优化器路径中未定义变量检测 |
||||||
|
* - $GLOBALS 数组访问形式正常编译 |
||||||
|
*/ |
||||||
|
class CountGlobalsTest extends \BaseTest |
||||||
|
{ |
||||||
|
public function testOptimizerUndefinedVar() |
||||||
|
{ |
||||||
|
// in_array($key, $array) 走优化器路径 (FuncCallOptimizer) |
||||||
|
// 优化器检测到 $key 未定义后应回退到传统路径并给出明确错误 |
||||||
|
$this->exec( |
||||||
|
'Undefined variable `$key`', |
||||||
|
'optimizer-undefined-var.php' |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function testGlobalsArrayAccessAllowed() |
||||||
|
{ |
||||||
|
// $GLOBALS['key'] 数组访问形式应正常通过编译 |
||||||
|
$testFile = __DIR__ . '/../code/globals-array-access.php'; |
||||||
|
$compiler = CompilerTest::create(ROOT_PATH); |
||||||
|
$compiler->addFiles([$testFile]); |
||||||
|
$compiler->prepareFile($testFile); |
||||||
|
$compiler->convertFile($testFile); |
||||||
|
|
||||||
|
$this->assertTrue(true); // 无异常即通过 |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue