- 实现 addClass 方法用于添加类定义到编译器 - 优化 hasNativeClass 和 getClassDef 方法使用 escapeClass 处理类名 - 更新 escapeClass 方法支持反斜杠替换为下划线并去除首尾反斜杠 - 重构 getPropertyIdentifier 方法简化属性标识符获取逻辑 - 新增 findNativeProperty 方法实现原生属性查找功能 - 添加对私有、受保护和公共属性的访问权限检查 - 支持继承链中属性的向上查找功能 - 为 get_class_vars 函数添加完整的测试用例覆盖pull/1/head
parent
ac3351b5f4
commit
095f9e8c66
4 changed files with 147 additions and 28 deletions
@ -0,0 +1,40 @@ |
|||||||
|
--TEST-- |
||||||
|
get_class_vars(): Simple test |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
|
||||||
|
class A { |
||||||
|
public $a = 1; |
||||||
|
private $b = 2; |
||||||
|
private $c = 3; |
||||||
|
} |
||||||
|
|
||||||
|
class B extends A { |
||||||
|
static public $aa = 4; |
||||||
|
static private $bb = 5; |
||||||
|
static protected $cc = 6; |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
var_dump(get_class_vars('A')); |
||||||
|
var_dump(get_class_vars('B')); |
||||||
|
|
||||||
|
try { |
||||||
|
get_class_vars("Unknown"); |
||||||
|
} catch (Error $e) { |
||||||
|
echo $e->getMessage(), "\n"; |
||||||
|
} |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
array(1) { |
||||||
|
["a"]=> |
||||||
|
int(1) |
||||||
|
} |
||||||
|
array(2) { |
||||||
|
["a"]=> |
||||||
|
int(1) |
||||||
|
["aa"]=> |
||||||
|
int(4) |
||||||
|
} |
||||||
|
get_class_vars(): Argument #1 ($class) must be a valid class name, Unknown given |
||||||
@ -0,0 +1,48 @@ |
|||||||
|
--TEST-- |
||||||
|
get_class_vars(): Testing the scope |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
|
||||||
|
class A { |
||||||
|
public $a = 1; |
||||||
|
protected $b = 2; |
||||||
|
} |
||||||
|
|
||||||
|
class B extends A { |
||||||
|
static public $aa = 4; |
||||||
|
static private $bb = 5; |
||||||
|
static protected $cc = 6; |
||||||
|
} |
||||||
|
|
||||||
|
class C extends B { |
||||||
|
public function __construct() { |
||||||
|
var_dump(get_class_vars('A')); |
||||||
|
var_dump(get_class_vars('B')); |
||||||
|
|
||||||
|
var_dump($this->a, $this->b); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function main() { |
||||||
|
new C; |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECTF-- |
||||||
|
array(2) { |
||||||
|
["a"]=> |
||||||
|
int(1) |
||||||
|
["b"]=> |
||||||
|
int(2) |
||||||
|
} |
||||||
|
array(4) { |
||||||
|
["a"]=> |
||||||
|
int(1) |
||||||
|
["b"]=> |
||||||
|
int(2) |
||||||
|
["aa"]=> |
||||||
|
int(4) |
||||||
|
["cc"]=> |
||||||
|
int(6) |
||||||
|
} |
||||||
|
int(1) |
||||||
|
int(2) |
||||||
Loading…
Reference in new issue