(PHP 5)
ReflectionFunction 类报告了一个函数的有关信息。
函数的名称。只读,并在尝试赋值的时候会抛出 ReflectionException。
ReflectionFunction::IS_DEPRECATED
指示了不建议使用的函数。
Lorenz R.S. (2011-08-12 01:24:03)
Here is a concise example of ReflectionFunction usage for Parameter Reflection / introspection (e.g. to automatically generate API descriptions)
<?php
$properties = $reflector->getProperties();
$refFunc = new ReflectionFunction('preg_replace');
foreach( $refFunc->getParameters() as $param ){
//invokes ■ReflectionParameter::__toString
print $param;
}
?>
prints:
Parameter #0 [ <required> $regex ]
Parameter #1 [ <required> $replace ]
Parameter #2 [ <required> $subject ]
Parameter #3 [ <optional> $limit ]
Parameter #4 [ <optional> &$count ]
uramihsayibok, gmail, com (2010-10-24 03:00:51)
ReflectionFunction will not work on class methods - instance or static. That is,
<?php
class A {
function B() {}
static function C() {}
}
new ReflectionFunction("A::B"); // throws "does not exist" ReflectionException
new ReflectionFunction("A::C"); // ditto
?>
The array syntax for method callbacks does not work either but throws a warning instead (__construct wants a string, not an array).
Since I don't know ahead of time whether something is a function or a class method, I have this:
<?php
function ReflectionFunctionFactory($callback) {
if (is_array($callback)) {
// must be a class method
list($class, $method) = $callback;
return new ReflectionMethod($class, $method);
}
// class::method syntax
if (is_string($callback) && strpos($callback, "::") !== false) {
list($class, $method) = explode("::", $callback);
return new ReflectionMethod($class, $method);
}
// objects as functions (PHP 5.3+)
if (version_compare(PHP_VERSION, "5.3.0", ">=") && method_exists($callback, "__invoke")) {
return new ReflectionMethod($callback, "__invoke");
}
// assume it's a function
return new ReflectionFunction($callback);
}
?>