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

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)

`

flancer64 at gmail dot com

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.

`

hanguofeng at gmail dot com

14 years ago

note that even if private method will also be 'has'.

Xorifelse

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(); } ?>

`