如何在php中的类中获取最初*定义*的方法列表?

时间:2009-08-18 02:35:56

标签: php class methods

我正在尝试获取实际在给定类的定义中定义的方法列表(不仅仅是从另一个类继承)。例如:

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)

这可能吗?

2 个答案:

答案 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