- 在 AssignOpTrait 中添加对静态属性赋值的支持 - 扩展 CompilerBase 以实现静态属性类型检测和赋值验证 - 添加 assertCanAssignStaticProp 方法进行静态属性赋值检查 - 重构静态属性本地槽位生成逻辑,支持不同数据类型 - 为对象属性提升优化添加安全检查机制 - 新增测试用例验证静态属性原生类型默认值功能 - 更新函数上下文文档注释以反映静态属性槽位映射变化pull/1/head
parent
4ff12b58d1
commit
feb5041d2e
6 changed files with 180 additions and 17 deletions
@ -0,0 +1,31 @@ |
||||
--TEST-- |
||||
SSA object prop: this object argument escape prevents property hoisting |
||||
--FILE-- |
||||
<?php |
||||
use native_types; |
||||
|
||||
class Foo { |
||||
public int $a; |
||||
|
||||
public function run(): void { |
||||
$this->a = 1; |
||||
|
||||
$fn = 'make_ref'; |
||||
$fn($this); |
||||
$this->a += 1; |
||||
|
||||
var_dump($this->a); |
||||
} |
||||
} |
||||
|
||||
function make_ref(Foo $o): void { |
||||
$ref =& $o->a; |
||||
$ref = 99; |
||||
} |
||||
|
||||
function main(): void { |
||||
(new Foo())->run(); |
||||
} |
||||
?> |
||||
--EXPECT-- |
||||
int(100) |
||||
@ -0,0 +1,53 @@ |
||||
--TEST-- |
||||
Static properties with native_types keep defaults and local slots |
||||
--FILE-- |
||||
<?php |
||||
use native_types; |
||||
|
||||
class StaticNativeDefaults { |
||||
public static int $i = 42; |
||||
public static float $f = 3.5; |
||||
public static bool $b = true; |
||||
public static string $s = "seed"; |
||||
public static array $a = [1, 2]; |
||||
} |
||||
|
||||
function main(): void { |
||||
var_dump(StaticNativeDefaults::$i); |
||||
var_dump(StaticNativeDefaults::$f); |
||||
var_dump(StaticNativeDefaults::$b); |
||||
var_dump(StaticNativeDefaults::$s); |
||||
var_dump(StaticNativeDefaults::$a); |
||||
|
||||
StaticNativeDefaults::$i = 100; |
||||
StaticNativeDefaults::$f = 2.25; |
||||
StaticNativeDefaults::$b = false; |
||||
StaticNativeDefaults::$s = "changed"; |
||||
StaticNativeDefaults::$a = [9]; |
||||
|
||||
var_dump(StaticNativeDefaults::$i); |
||||
var_dump(StaticNativeDefaults::$f); |
||||
var_dump(StaticNativeDefaults::$b); |
||||
var_dump(StaticNativeDefaults::$s); |
||||
var_dump(StaticNativeDefaults::$a); |
||||
} |
||||
?> |
||||
--EXPECT-- |
||||
int(42) |
||||
float(3.5) |
||||
bool(true) |
||||
string(4) "seed" |
||||
array(2) { |
||||
[0]=> |
||||
int(1) |
||||
[1]=> |
||||
int(2) |
||||
} |
||||
int(100) |
||||
float(2.25) |
||||
bool(false) |
||||
string(7) "changed" |
||||
array(1) { |
||||
[0]=> |
||||
int(9) |
||||
} |
||||
Loading…
Reference in new issue