文字

ReflectionClass::hasMethod

(PHP 5 >= 5.1.0)

ReflectionClass::hasMethod检查方法是否已定义

说明

public bool ReflectionClass::hasMethod ( string $name )

检查一个类中指定的方法是否已定义。

参数

name

要检查的方法的名称。

返回值

如果有这个方法返回 TRUE ,否则返回 FALSE

范例

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

以上例程会输出:

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

参见

  • ReflectionClass::hasConstant() - 检查常量是否已经定义
  • ReflectionClass::hasProperty() - 检查属性是否已定义

用户评论:

[#1] michaelgranados at gmail dot com [2012-05-19 14:47:39]

A way to check if you can call an method over a class:

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

[#2] phoenix at todofixthis dot com [2010-10-28 09:47:14]

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
?>

[#3] hanguofeng at gmail dot com [2010-10-20 09:09:56]

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

上一篇: 下一篇: