php中的反射类,PHP反射类ReflectionClass

今天遇到了这样一个问题,如下代码:

classA.php<?php

class ClassA{

public function funcAa(){

}

public function funcAb(){

}

public function funcAc(){

}

}

?>

classB.php<?php

include './classA.php';

class ClassB extends ClassA{

public function funcBa(){

}

public function funcBb(){

}

public function funcBc(){

}

public function funcAa(){

parent::funcAa();

}

}

$classB = new ClassB;

$classFuncB = get_class_methods($classB);

echo '

';

print_r($classFuncB);

?>

当我需要找出ClassB里面的所有方法的时候结果如下:Array

(

[0] => funcBa

[1] => funcBb

[2] => funcBc

[3] => funcAa

[4] => funcAb

[5] => funcAc

)

一共6个方法,实际上我不想要继承了ClassA里面的方法,我只想要ClassB的方法,怎么办呢?我稍微更改了如下:$classA = new ClassA;

$classB = new ClassB;

$classFuncA = get_class_methods($classA);

$classFuncB = get_class_methods($classB);

echo '

';

print_r(array_diff($classFuncB,$classFuncA));

结果如下:Array

(

[0] => funcBa

[1] => funcBb

[2] => funcBc

)

少了一个方法 funcAa ,虽然funcAa是 ClassB 从 ClassA那里继承过来的,但是同样ClassB也有这个方法,所以不是我想要的结果。

解决方法:$reflection = new ReflectionClass('ClassB');

print_r($reflection->getMethods());

结果:Array

(

[0] => ReflectionMethod Object

(

[name] => funcBa

[class] => ClassB

)

[1] => ReflectionMethod Object

(

[name] => funcBb

[class] => ClassB

)

[2] => ReflectionMethod Object

(

[name] => funcBc

[class] => ClassB

)

[3] => ReflectionMethod Object

(

[name] => funcAa

[class] => ClassB

)

[4] => ReflectionMethod Object

(

[name] => funcAb

[class] => ClassA

)

[5] => ReflectionMethod Object

(

[name] => funcAc

[class] => ClassA

)

)

可以看到 [4]、[5] 里面的class 对应的值是ClassA,而其他对应的值都是ClassB。通过这个可以用foreach来实现最后想要的结果:$reflection = new ReflectionClass('ClassB');

$array = '';

foreach($reflection->getMethods() as $obj){

if($obj->class == $reflection->getName()){    //$reflection->getName()  获取类名

$array[] = $obj->name;

}

}

echo '

';

print_r($array);

最后结果:Array

(

[0] => funcBa

[1] => funcBb

[2] => funcBc

[3] => funcAa

)

完成,关于 ReflectionClass 更多的知识请参考手册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值