PHP: Hypertext Preprocessor (original) (raw)
ReflectionClass::hasMethod
(PHP 5 >= 5.1.2, PHP 7, PHP 8)
ReflectionClass::hasMethod — Checks if method is defined
Description
public ReflectionClass::hasMethod(string $name
): bool
Parameters
name
Name of the method being checked for.
Return Values
[true](reserved.constants.php#constant.true)
if it has the method, otherwise [false](reserved.constants.php#constant.false)
Examples
Example #1 ReflectionClass::hasMethod() example
`<?php
Class C {
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
- ReflectionClass::hasConstant() - Checks if constant is defined
- ReflectionClass::hasProperty() - Checks if property is defined
Found A Problem?
phoenix at todofixthis dot com ¶
14 years ago
`Parent methods (regardless of visibility) are also available to a ReflectionObject. E.g.,
Reflector=newReflectionObject(Reflector = new ReflectionObject(Reflector=newReflectionObject(Instance);var_dump($Reflector->hasMethod('parentPublic')); // true var_dump($Reflector->hasMethod('parentPrivate')); // true ?>`
dn dot permyakov at gmail dot com ¶
6 years ago
`Trait methods can be seen by both actual and alias names
hasMethod('getSweet')); var_dump($class->hasMethod('getSpicy')); ?>bool(true)
bool(true)
`
8 years ago
`Annotated methods that are implemented using PHP magic methods are not recognized by "hasMethod".
codedMethod(); obj−>annotatedMethod();obj->annotatedMethod();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.
`
14 years ago
note that even if private method will also be 'has'.
8 years 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
`
michaelgranados at gmail dot com ¶
12 years ago
`A way to check if you can call an method over a class:
classInstance=newReflectionClass(classInstance = new ReflectionClass(classInstance=newReflectionClass(className); if ($classInstance->hasMethod($method)) { return false; } methodInstance=methodInstance = methodInstance=instance->getMethod($method); return $methodInstance->isPublic(); } ?>`