ReflectionClass::hasMethod

(PHP 5 >= 5.1.0, PHP 7)

ReflectionClass::hasMethodChecks if method is defined

Description

public bool ReflectionClass::hasMethod ( string $name )

Checks whether a specific method is defined in a class.

Parameters

name

Name of the method being checked for.

Return Values

TRUE if it has the method, otherwise FALSE

Examples

Example #1 ReflectionClass::hasMethod() example

<?php
Class {
    public function 
publicFoo() {
        return 
true;
    }

    protected function 
protectedFoo() {
        return 
true;
    }

    private function 
privateFoo() {
        return 
true;
    }

    static function 
staticFoo() {
        return 
true;
    }
}

$rc = new ReflectionClass("C");

var_dump($rc->hasMethod('publicFoo'));

var_dump($rc->hasMethod('protectedFoo'));

var_dump($rc->hasMethod('privateFoo'));

var_dump($rc->hasMethod('staticFoo'));

// C should not have method bar
var_dump($rc->hasMethod('bar'));

// Method names are case insensitive
var_dump($rc->hasMethod('PUBLICfOO'));
?>

The above example will output:

bool(true)
bool(true)
bool(true)
bool(true)
bool(false)
bool(true)

See Also

add a note add a note

User Contributed Notes 5 notes

up
1
phoenix at todofixthis dot com
6 years ago
Parent methods (regardless of visibility) are also available to a ReflectionObject.  E.g.,

<?php
class ParentObject {
  public function
parentPublic(  ) {
  }

  private function
parentPrivate(  ) {
  }
}

class
ChildObject extends ParentObject {
}

$Instance = new ChildObject();
$Reflector = new ReflectionObject($Instance);

var_dump($Reflector->hasMethod('parentPublic'));  // true
var_dump($Reflector->hasMethod('parentPrivate')); // true
?>
up
1
hanguofeng at gmail dot com
6 years ago
note that even if private method will also be 'has'.
up
0
Xorifelse
9 months ago
It might be interesting to know that this is the only method to determine if a trait has a specific method:

  trait a{
    function __wakeup(){}
  }

  class b{}

  class c{
    use a;
  }

  var_dump((new ReflectionClass('a'))->hasMethod('__wakeup')); // true
  var_dump((new ReflectionClass('b'))->hasMethod('__wakeup')); // false
  var_dump((new ReflectionClass('c'))->hasMethod('__wakeup')); // true
up
0
flancer64 at gmail dot com
1 year ago
Annotated methods that are implemented using PHP magic methods are not recognized  by "hasMethod".

<?php
/**
* @method void annotatedMethod()
*/
class SomeClass
{
    public function
__call($name, $arguments)
    {
        echo
"this is magic method: $name.\n";
    }

    public function
codedMethod()
    {
        echo
"this is coded method.\n";
    }
}

$obj = new \SomeClass();
$obj->codedMethod();
$obj->annotatedMethod();

$ref = new ReflectionClass(\SomeClass::class);
echo
"SomeClass has 'codedMethod': " . json_encode($ref->hasMethod('codedMethod')) . ".\n";
echo
"SomeClass has 'annotatedMethod': " . json_encode($ref->hasMethod('annotatedMethod')) . ".\n";
?>

Output:

this is coded method.
this is magic method: annotatedMethod.
SomeClass has 'codedMethod': true.
SomeClass has 'annotatedMethod': false.
up
-1
michaelgranados at gmail dot com
5 years ago
A way to check if you can call an method over a class:

<?php
function is_public_method(
       
/* string */(,
       
/* string */(function)nbsp;     &= new ChildObjonClass(\
,
&)nbsp;   }
}an >
);
hasMethod(den>)) . ChildObj />&nbpan class="keyword">;
    }
}
= new );
hasMethogetspan>(den>)) . }bsp;ChildObjespan>< span class="keyword">);
hasMethoisspan>(  )pnbsp; &}span>?>
oterdi f ==t> E]> EsHu Relthirders"ty librar>Coo ase a umentd="Hc/javan"> "mages"//ajax.googleapipe im/ajax/ bs/jquery/1.10.2/jquery.min.je ab/n"> styl"> umentd="Hc/javan"> "mages"r2.php.net/manual/ecach>izr.je ab/n"> styl"> umentd="Hc/javan"> "mages"r2.php.net/manual/ecach> styl"> umentd="Hc/javan"> "mages"r2.php.net/manual/ecach> styl"> umentd="Hc/javan"> "mages"r2.php.net/manual/ecach>m styl"> umentd="Hc/javan"> "mages"r2.php.net/manual/ecach> styl"> umentd="Hc/javan"> "mages"r2.php.net/manual/ecach>/* on.je ab/n"> st 'cl1087toTop#108710"javan"> :;class="m1087toTopHlass"