TypePHP 编译器 https://swoole.com/aot/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

89 lines
1.8 KiB

--TEST--
Static-property slot caches retain live values, references, inheritance and late static binding
--FILE--
<?php
class StaticSlotBase
{
public static mixed $shared = 'base';
public static mixed $separate = 'base';
public static function mutateShared(): array
{
$before = self::$shared;
self::$shared = null;
$afterNull = self::$shared;
$reference = &self::$shared;
$reference = 'reference';
return [$before, $afterNull, self::$shared];
}
public static function mutateLate(string $value): array
{
$before = static::$separate;
static::$separate = null;
$afterNull = static::$separate;
static::$separate = $value;
return [static::class, $before, $afterNull, static::$separate];
}
}
class StaticSlotInherited extends StaticSlotBase
{
}
class StaticSlotChildA extends StaticSlotBase
{
public static mixed $separate = 'a';
}
class StaticSlotChildB extends StaticSlotBase
{
public static mixed $separate = 'b';
}
function main(): void
{
var_dump(StaticSlotBase::mutateShared());
var_dump(StaticSlotInherited::$shared);
StaticSlotInherited::$shared = 'child-write';
var_dump(StaticSlotBase::$shared);
var_dump(StaticSlotChildA::mutateLate('A'));
var_dump(StaticSlotChildB::mutateLate('B'));
var_dump(StaticSlotChildA::$separate, StaticSlotChildB::$separate);
}
?>
--EXPECT--
array(3) {
[0]=>
string(4) "base"
[1]=>
NULL
[2]=>
string(9) "reference"
}
string(9) "reference"
string(11) "child-write"
array(4) {
[0]=>
string(16) "StaticSlotChildA"
[1]=>
string(1) "a"
[2]=>
NULL
[3]=>
string(1) "A"
}
array(4) {
[0]=>
string(16) "StaticSlotChildB"
[1]=>
string(1) "b"
[2]=>
NULL
[3]=>
string(1) "B"
}
string(1) "A"
string(1) "B"