- 在 ArgInfo 类中添加 nullable 属性用于标识参数是否可空 - 在 ClassDef 类中添加 inheritedFromInternalClass 属性用于标记是否继承自内部类 - 实现对继承自内部类的动态方法调用支持 - 添加 Reflection::isInternalClass 方法用于判断类是否为内部类 - 添加 Reflection::hasMethod 方法用于检查类是否存在指定方法 - 在参数解析时设置 nullable 标志 - 修改编译器基类以支持内部类继承的错误处理 - 更新翻译器以正确处理可空参数的调用逻辑pull/1/head
parent
86055c3bf1
commit
096a92a62e
7 changed files with 130 additions and 5 deletions
@ -0,0 +1,40 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
class A |
||||||
|
{ |
||||||
|
public function __construct() |
||||||
|
{ |
||||||
|
echo "A::__construct()\n"; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class B extends A |
||||||
|
{ |
||||||
|
public function __construct() |
||||||
|
{ |
||||||
|
parent::__construct(); |
||||||
|
echo "B::__construct()\n"; |
||||||
|
} |
||||||
|
|
||||||
|
public function foo() |
||||||
|
{ |
||||||
|
|
||||||
|
var_dump(__METHOD__); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class C extends ArrayObject { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
function main() |
||||||
|
{ |
||||||
|
$o = new B; |
||||||
|
$o->foo(); |
||||||
|
|
||||||
|
$c = new C; |
||||||
|
$c->offsetSet(0, 1); |
||||||
|
$c->offsetSet(1, 2); |
||||||
|
var_dump($c); |
||||||
|
var_dump($c->foo()); |
||||||
|
} |
||||||
@ -0,0 +1,24 @@ |
|||||||
|
--TEST-- |
||||||
|
extends redis |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
class MyRedis extends \redis |
||||||
|
{ |
||||||
|
public function __construct(?array $options = null) |
||||||
|
{ |
||||||
|
parent::__construct($options); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function main() |
||||||
|
{ |
||||||
|
$o = new MyRedis; |
||||||
|
$o->connect('127.0.0.1', 6379); |
||||||
|
$uuid = uniqid(); |
||||||
|
var_dump($o->set('key', $uuid)); |
||||||
|
var_dump($o->get('key') === $uuid); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
bool(true) |
||||||
|
bool(true) |
||||||
Loading…
Reference in new issue