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 ]
The ReflectionFunction class
Увод
The ReflectionFunction class reports information about a function.
Parent class ReflectionFunctionAbstract has the same methods except invoke(), invokeArgs(), export() and isDisabled().
Синтаксис за класове
ReflectionFunction
/* Constants */
/* Properties */
public
$name
;
/* Methods */
__construct
( string $name
)
/* Inherited methods */
}Свойства
- name
-
Prop description
Предварително-дефинирани константи
ReflectionFunction Node Types
- ReflectionFunction::IS_DEPRECATED
-
Description here...
Съдържание
- ReflectionFunction::__construct — Constructs a ReflectionFunction object
- ReflectionFunction::export — Exports function
- ReflectionFunction::invoke — Invokes function
- ReflectionFunction::invokeArgs — Invokes function args
- ReflectionFunction::isDisabled — Checks if function is disabled
- ReflectionFunction::__toString — To string
Lorenz R.S.
12-Aug-2011 01:24
uramihsayibok, gmail, com
24-Oct-2010 03:00
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);
}
?>
