©
本文档使用 PHP中文网手册 发布
(PHP 5 >= 5.1.0)
ReflectionClass::hasMethod — 检查方法是否已定义
$name
)检查一个类中指定的方法是否已定义。
name
要检查的方法的名称。
如果有这个方法返回 TRUE
,否则返回 FALSE
。
Example #1 ReflectionClass::hasMethod() 例子
<?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' ));
?>
以上例程会输出:
bool(true) bool(true) bool(true) bool(true) bool(false) bool(true)
[#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'.