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();
}
?>
ReflectionClass::hasMethod
(PHP 5 >= 5.1.0)
ReflectionClass::hasMethod — メソッドが定義されているかどうかを調べる
説明
public bool ReflectionClass::hasMethod
( string
$name
)そのクラスで特定のメソッドが定義されているかどうかを調べます。
パラメータ
-
name -
調べたいメソッドの名前。
返り値
メソッドが定義されている場合に TRUE、それ以外の場合に FALSE を返します。
例
例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 には bar メソッドがありません
var_dump($rc->hasMethod('bar'));
// メソッド名は大文字小文字を区別しません
var_dump($rc->hasMethod('PUBLICfOO'));
?>
上の例の出力は以下となります。
bool(true) bool(true) bool(true) bool(true) bool(false) bool(true)
参考
- ReflectionClass::hasConstant() - 定数が定義されているかどうかを調べる
- ReflectionClass::hasProperty() - プロパティが定義されているかどうかを調べる
michaelgranados at gmail dot com
19-May-2012 02:47
phoenix at todofixthis dot com
28-Oct-2010 09:47
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
?>
hanguofeng at gmail dot com
20-Oct-2010 09:09
note that even if private method will also be 'has'.
