我正在尝试获取实际在给定类的定义中定义的方法列表(不仅仅是从另一个类继承)。例如:
class A
{ function bob()
{
}
}
class B extends A
{ function rainbrew()
{
}
}
class C extends B
{ function bob()
{
}
}
echo print_r(get_defined_class_methods("A"), true)."<br>\n";
echo print_r(get_defined_class_methods("B"), true)."<br>\n";
echo print_r(get_defined_class_methods("C"), true)."<br>\n";
我希望结果如下:
array([0]=>bob)
array([0]=>rainbrew)
array([0]=>bob)
这可能吗?
答案 0 :(得分:4)
您可以使用Reflection:
$reflectA = new ReflectionClass('A');
print_r($reflectA->getMethods());
这实际上会为您提供一组ReflectionMethod对象,但您可以轻松地从那里推断出您需要的内容。 ReflectionMethods为此提供了getDeclaringClass()
函数,因此您可以找到在哪个类中声明了哪些函数:
$reflectC = new ReflectionClass('C');
$methods = $reflectC->getMethods();
$classOnlyMethods = array();
foreach($methods as $m) {
if ($m->getDeclaringClass()->name == 'C') {
$classOnlyMethods[] = $m->name;
}
}
print_r($classOnlyMethods);
这将给出:
Array ( [0] => bob )
所以,作为最终的解决方案,试试这个:
function get_defined_class_methods($className)
{
$reflect = new ReflectionClass($className);
$methods = $reflect->getMethods();
$classOnlyMethods = array();
foreach($methods as $m) {
if ($m->getDeclaringClass()->name == $className) {
$classOnlyMethods[] = $m->name;
}
}
return $classOnlyMethods;
}
答案 1 :(得分:-1)
我还没试过,但看起来你想要使用get_class_methods
<?php
class myclass {
// constructor
function myclass()
{
return(true);
}
// method 1
function myfunc1()
{
return(true);
}
// method 2
function myfunc2()
{
return(true);
}
}
$class_methods = get_class_methods('myclass');
// or
$class_methods = get_class_methods(new myclass());
foreach ($class_methods as $method_name) {
echo "$method_name\n";
}
?>
以上示例将输出:
myclass myfunc1 myfunc2