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

如何获得最初在php类中*定义*的方法列表?,php,class,methods,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

我试图获得一个方法列表,这些方法实际上是在给定类的定义中定义的(而不仅仅是从另一个类继承的)。例如:

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";

这可能吗?

我还没有试过,但看起来你想用


上述示例将输出:

myclass myfunc1 myfunc2


我还没试过,但看起来你想用


上述示例将输出:

myclass myfunc1 myfunc2

您可以为此使用:

$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;
}
您可以为此使用:

$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;
}