SunshinePHP Developer Conference 2015

ReflectionClass::hasMethod

(PHP 5 >= 5.1.0)

ReflectionClass::hasMethodComprueba si un método está o no definido

Descripción

public bool ReflectionClass::hasMethod ( string $name )

Comprueba si el método especificado está o no definido en la clase.

Parámetros

name

Nombre del método que se desea comprobar.

Valores devueltos

TRUE si el método está definido, y en cualquier otro caso FALSE

Ejemplos

Ejemplo #1 Ejemplo de ReflectionClass::hasMethod()

<?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'));
?>

El resultado del ejemplo sería:

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

Ver también

add a note add a note

User Contributed Notes 3 notes

up
1
hanguofeng at gmail dot com
4 years ago
note that even if private method will also be 'has'.
up
0
phoenix at todofixthis dot com
3 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
michaelgranados at gmail dot com
2 years ago
A way to check if you can call an method over a class:

<?php
function is_public_method(
       
/* string */$className,
       
/* string */$method
){
   
$classInstance = new ReflectionClass($className);
    if (
$classInstance->hasMethod($method)) {
        return
false;
    }
   
$methodInstance = $instance->getMethod($method);
    return
$methodInstance->isPublic();
}
?>
To Top