如何获得最初在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;
}