- 实现了static::method()静态方法调用的编译支持 - 添加了new static()动态实例化的处理逻辑 - 增加了static属性访问的正确解析 - 添加了两个新的AOT测试用例验证static功能 - 实现了延迟解析以支持后期绑定行为pull/1/head
parent
cebe50121a
commit
d8e164b32c
3 changed files with 92 additions and 4 deletions
@ -0,0 +1,34 @@ |
|||||||
|
--TEST-- |
||||||
|
class static 003 |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
namespace Test { |
||||||
|
class Worker1 |
||||||
|
{ |
||||||
|
static function hello() |
||||||
|
{ |
||||||
|
return new static(); |
||||||
|
} |
||||||
|
|
||||||
|
static function foo() |
||||||
|
{ |
||||||
|
return self::hello(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class Worker2 extends Worker1 |
||||||
|
{ |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
namespace { |
||||||
|
use Test\Worker2; |
||||||
|
function main() |
||||||
|
{ |
||||||
|
$o = Worker2::foo(); |
||||||
|
var_dump(get_class($o)); |
||||||
|
} |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(12) "Test\Worker2" |
||||||
@ -0,0 +1,43 @@ |
|||||||
|
--TEST-- |
||||||
|
class static 004 |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
namespace Test { |
||||||
|
class Worker1 |
||||||
|
{ |
||||||
|
static string $var = 'hello'; |
||||||
|
|
||||||
|
static function foo() |
||||||
|
{ |
||||||
|
var_dump(self::$var); |
||||||
|
var_dump(static::$var); |
||||||
|
} |
||||||
|
|
||||||
|
static function bar() |
||||||
|
{ |
||||||
|
static::$var = 'world'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class Worker2 extends Worker1 |
||||||
|
{ |
||||||
|
static string $var = 'swoole'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
namespace { |
||||||
|
use Test\Worker2; |
||||||
|
function main() |
||||||
|
{ |
||||||
|
Worker2::foo(); |
||||||
|
Worker2::bar(); |
||||||
|
Worker2::foo(); |
||||||
|
} |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
string(5) "hello" |
||||||
|
string(6) "swoole" |
||||||
|
string(5) "hello" |
||||||
|
string(5) "world" |
||||||
|
|
||||||
Loading…
Reference in new issue