21 protected const CLASS_NAME_PATTERN_53 =
'/^(\\\\?[a-z_\x7f-\xff][a-z0-9_\x7f-\xff]*)+$/i';
33 $original = $callable;
35 $callable = $this->resolveCallable($callable);
36 if (!is_callable($callable)) {
40 $this->
getLogger()->warning(
"Handler for {$description} is not callable: " . $this->describeCallable($original));
78 $callback = $this->resolveCallable($callback);
79 return $callback && is_callable($callback);
90 if (is_callable($callable)) {
94 if (is_string($callable)
95 &&
preg_match(self::CLASS_NAME_PATTERN_53, $callable)
96 && class_exists($callable)) {
97 $callable =
new $callable;
100 return is_callable($callable) ? $callable : null;
113 if (is_string($callable)) {
116 if (is_array($callable) && array_keys($callable) === [0, 1] && is_string($callable[1])) {
117 if (is_string($callable[0])) {
118 return "{$callable[0]}::{$callable[1]}";
120 return "(" . get_class($callable[0]) .
")->{$callable[1]}";
122 if ($callable instanceof \
Closure) {
123 $ref = new \ReflectionFunction($callable);
124 $file = $ref->getFileName();
125 $line = $ref->getStartLine();
127 if ($file_root && 0 ===
strpos($file, $file_root)) {
131 return "(Closure {$file}:{$line})";
133 if (is_object($callable)) {
134 return "(" . get_class($callable) .
")->__invoke()";
136 return print_r($callable,
true);
isCallable($callback)
Test is callback is callable Unlike is_callable(), this function also tests invokable classes...
Helpers for providing callable-based APIs.
$args
Some servers don't allow PHP to check the rewrite, so try via AJAX.
trait Loggable
Enables adding a logger.
The object passed to invokable class name handlers.
The object passed to invokable class name handlers.
resolveCallable($callable)
Resolve a callable, possibly instantiating a class name.
describeCallable($callable, $file_root= '')
Get a string description of a callback.
call($callable, $object, $args)
Call the handler with the hook/event object.
getLogger()
Returns logger.
if($email instanceof\Elgg\Email) $object