Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
getClosureCalledClass example
if
(
\
is_string
(
$callable
)
)
{
return
sprintf
(
'%s()',
$callable
)
;
}
if
(
$callable
instanceof \Closure
)
{
$r
=
new
\
ReflectionFunction
(
$callable
)
;
if
(
str_contains
(
$r
->name, '{closure}'
)
)
{
return
'Closure()';
}
if
(
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
)
{
return
sprintf
(
'%s::%s()',
$class
->name,
$r
->name
)
;
}
return
$r
->name.'()';
}
if
(
method_exists
(
$callable
, '__invoke'
)
)
{
return
sprintf
(
'%s::__invoke()',
$callable
::
class
)
;
}
throw
new
\
InvalidArgumentException
(
'Callable is not describable.'
)
;
}
if
(
$callable
instanceof \Closure
)
{
$string
.= "\n- Type: `closure`";
$r
=
new
\
ReflectionFunction
(
$callable
)
;
if
(
str_contains
(
$r
->name, '{closure}'
)
)
{
$this
->
write
(
$string
."\n"
)
;
return
;
}
$string
.= "\n".
sprintf
(
'- Name: `%s`',
$r
->name
)
;
if
(
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
)
{
$string
.= "\n".
sprintf
(
'- Class: `%s`',
$class
->name
)
;
if
(
!
$r
->
getClosureThis
(
)
)
{
$string
.= "\n- Static: yes";
}
}
$this
->
write
(
$string
."\n"
)
;
return
;
}
'class' =>
$r
->
getName
(
)
,
'method' => null,
'file' =>
$r
->
getFileName
(
)
,
'line' =>
$r
->
getStartLine
(
)
,
]
;
if
(
str_contains
(
$r
->name, '{closure}'
)
)
{
return
$controller
;
}
$controller
[
'method'
]
=
$r
->name;
if
(
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
)
{
$controller
[
'class'
]
=
$class
->name;
}
else
{
return
$r
->name;
}
return
$controller
;
}
if
(
\
is_object
(
$controller
)
)
{
$r
=
new
\
ReflectionClass
(
$controller
)
;
$this
->dispatcher =
$dispatcher
;
$this
->priority =
$priority
;
if
(
\
is_array
(
$listener
)
)
{
[
$this
->name,
$this
->callableRef
]
=
$this
->
parseListener
(
$listener
)
;
$this
->pretty =
$this
->name.'::'.
$listener
[
1
]
;
$this
->callableRef .= '::'.
$listener
[
1
]
;
}
elseif
(
$listener
instanceof \Closure
)
{
$r
=
new
\
ReflectionFunction
(
$listener
)
;
if
(
str_contains
(
$r
->name, '{closure}'
)
)
{
$this
->pretty =
$this
->name = 'closure';
}
elseif
(
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
)
{
$this
->name =
$class
->name;
$this
->pretty =
$this
->name.'::'.
$r
->name;
}
else
{
$this
->pretty =
$this
->name =
$r
->name;
}
}
elseif
(
\
is_string
(
$listener
)
)
{
$this
->pretty =
$this
->name =
$listener
;
}
else
{
$this
->name =
get_debug_type
(
$listener
)
;
$this
->pretty =
$this
->name.'::__invoke';
$this
->callableRef =
$listener
::
class
.'::__invoke';
}
$handler
=
$handler
(
...
)
;
$this
->handler =
$handler
;
$this
->options =
$options
;
$r
=
new
\
ReflectionFunction
(
$handler
)
;
if
(
str_contains
(
$r
->name, '{closure}'
)
)
{
$this
->name = 'Closure';
}
elseif
(
!
$handler
=
$r
->
getClosureThis
(
)
)
{
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
;
$this
->name =
(
$class
?
$class
->name.'::' : ''
)
.
$r
->name;
}
else
{
if
(
$handler
instanceof BatchHandlerInterface
)
{
$this
->batchHandler =
$handler
;
}
$this
->name =
$handler
::
class
.'::'.
$r
->name;
}
}
if
(
$callable
instanceof \Closure
)
{
$callableXML
->
setAttribute
(
'type', 'closure'
)
;
$r
=
new
\
ReflectionFunction
(
$callable
)
;
if
(
str_contains
(
$r
->name, '{closure}'
)
)
{
return
$dom
;
}
$callableXML
->
setAttribute
(
'name',
$r
->name
)
;
if
(
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
)
{
$callableXML
->
setAttribute
(
'class',
$class
->name
)
;
if
(
!
$r
->
getClosureThis
(
)
)
{
$callableXML
->
setAttribute
(
'static', 'true'
)
;
}
}
return
$dom
;
}
if
(
method_exists
(
$callable
, '__invoke'
)
)
{
$callableXML
->
setAttribute
(
'type', 'object'
)
;
if
(
\
is_string
(
$callback
)
)
{
return
$callback
;
}
if
(
\
is_array
(
$callback
)
)
{
$class
= \
is_object
(
$callback
[
0
]
)
?
get_debug_type
(
$callback
[
0
]
)
:
$callback
[
0
]
;
$method
=
$callback
[
1
]
;
}
elseif
(
$callback
instanceof \Closure
)
{
$r
=
new
\
ReflectionFunction
(
$callback
)
;
if
(
str_contains
(
$r
->name, '{closure}'
)
|| !
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
)
{
return
$r
->name;
}
$class
=
$class
->name;
$method
=
$r
->name;
}
else
{
$class
=
get_debug_type
(
$callback
)
;
$method
= '__invoke';
}
return
$class
.'::'.
$method
;
}
if
(
\
is_string
(
$callback
)
)
{
return
$callback
;
}
if
(
\
is_array
(
$callback
)
)
{
$class
= \
is_object
(
$callback
[
0
]
)
?
get_debug_type
(
$callback
[
0
]
)
:
$callback
[
0
]
;
$method
=
$callback
[
1
]
;
}
elseif
(
$callback
instanceof \Closure
)
{
$r
=
new
\
ReflectionFunction
(
$callback
)
;
if
(
str_contains
(
$r
->name, '{closure}'
)
|| !
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
)
{
return
$r
->name;
}
$class
=
$class
->name;
$method
=
$r
->name;
}
else
{
$class
=
get_debug_type
(
$callback
)
;
$method
= '__invoke';
}
return
$class
.'::'.
$method
;
}
public
function
getAttributes
(
string
$className
= null
)
: array
{
if
(
isset
(
$this
->attributes
)
)
{
return
null ===
$className
?
$this
->attributes :
$this
->attributes
[
$className
]
??
[
]
;
}
if
(
\
is_array
(
$this
->controller
)
&&
method_exists
(
...
$this
->controller
)
)
{
$class
=
new
\
ReflectionClass
(
$this
->controller
[
0
]
)
;
}
elseif
(
\
is_string
(
$this
->controller
)
&& false !==
$i
=
strpos
(
$this
->controller, '::'
)
)
{
$class
=
new
\
ReflectionClass
(
substr
(
$this
->controller, 0,
$i
)
)
;
}
else
{
$class
=
str_contains
(
$this
->controllerReflector->name, '{closure}'
)
? null :
(
\PHP_VERSION_ID >= 80111 ?
$this
->controllerReflector->
getClosureCalledClass
(
)
:
$this
->controllerReflector->
getClosureScopeClass
(
)
)
;
}
$this
->attributes =
[
]
;
foreach
(
array_merge
(
$class
?->
getAttributes
(
)
??
[
]
,
$this
->controllerReflector->
getAttributes
(
)
)
as
$attribute
)
{
if
(
class_exists
(
$attribute
->
getName
(
)
)
)
{
$this
->attributes
[
$attribute
->
getName
(
)
]
[
]
=
$attribute
->
newInstance
(
)
;
}
}
return
null ===
$className
?
$this
->attributes :
$this
->attributes
[
$className
]
??
[
]
;
}
}
$this
->dispatcher =
$dispatcher
;
$this
->priority =
$priority
;
if
(
\
is_array
(
$listener
)
)
{
[
$this
->name,
$this
->callableRef
]
=
$this
->
parseListener
(
$listener
)
;
$this
->pretty =
$this
->name.'::'.
$listener
[
1
]
;
$this
->callableRef .= '::'.
$listener
[
1
]
;
}
elseif
(
$listener
instanceof \Closure
)
{
$r
=
new
\
ReflectionFunction
(
$listener
)
;
if
(
str_contains
(
$r
->name, '{closure}'
)
)
{
$this
->pretty =
$this
->name = 'closure';
}
elseif
(
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
)
{
$this
->name =
$class
->name;
$this
->pretty =
$this
->name.'::'.
$r
->name;
}
else
{
$this
->pretty =
$this
->name =
$r
->name;
}
}
elseif
(
\
is_string
(
$listener
)
)
{
$this
->pretty =
$this
->name =
$listener
;
}
else
{
$this
->name =
get_debug_type
(
$listener
)
;
$this
->pretty =
$this
->name.'::__invoke';
$this
->callableRef =
$listener
::
class
.'::__invoke';
}
if
(
$callable
instanceof \Closure
)
{
$data
[
'type'
]
= 'closure';
$r
=
new
\
ReflectionFunction
(
$callable
)
;
if
(
str_contains
(
$r
->name, '{closure}'
)
)
{
return
$data
;
}
$data
[
'name'
]
=
$r
->name;
if
(
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
)
{
$data
[
'class'
]
=
$class
->name;
if
(
!
$r
->
getClosureThis
(
)
)
{
$data
[
'static'
]
= true;
}
}
return
$data
;
}
if
(
method_exists
(
$callable
, '__invoke'
)
)
{
$data
[
'type'
]
= 'object';
'class' =>
$r
->
getName
(
)
,
'method' => null,
'file' =>
$r
->
getFileName
(
)
,
'line' =>
$r
->
getStartLine
(
)
,
]
;
if
(
str_contains
(
$r
->name, '{closure}'
)
)
{
return
$controller
;
}
$controller
[
'method'
]
=
$r
->name;
if
(
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
)
{
$controller
[
'class'
]
=
$class
->name;
}
else
{
return
$r
->name;
}
return
$controller
;
}
if
(
\
is_object
(
$controller
)
)
{
$r
=
new
\
ReflectionClass
(
$controller
)
;
public
function
getAttributes
(
)
: array
{
if
(
isset
(
$this
->attributes
)
)
{
return
$this
->attributes;
}
if
(
\
is_array
(
$this
->controller
)
&&
method_exists
(
...
$this
->controller
)
)
{
$class
=
new
\
ReflectionClass
(
$this
->controller
[
0
]
)
;
}
elseif
(
\
is_string
(
$this
->controller
)
&& false !==
$i
=
strpos
(
$this
->controller, '::'
)
)
{
$class
=
new
\
ReflectionClass
(
substr
(
$this
->controller, 0,
$i
)
)
;
}
else
{
$class
=
str_contains
(
$this
->controllerReflector->name, '{closure}'
)
? null :
(
\PHP_VERSION_ID >= 80111 ?
$this
->controllerReflector->
getClosureCalledClass
(
)
:
$this
->controllerReflector->
getClosureScopeClass
(
)
)
;
}
$this
->attributes =
[
]
;
foreach
(
array_merge
(
$class
?->
getAttributes
(
)
??
[
]
,
$this
->controllerReflector->
getAttributes
(
)
)
as
$attribute
)
{
if
(
class_exists
(
$attribute
->
getName
(
)
)
)
{
$this
->attributes
[
$attribute
->
getName
(
)
]
[
]
=
$attribute
->
newInstance
(
)
;
}
}
return
$this
->attributes;
}
}
if
(
\
is_string
(
$callable
)
)
{
return
sprintf
(
'%s()',
$callable
)
;
}
if
(
$callable
instanceof \Closure
)
{
$r
=
new
\
ReflectionFunction
(
$callable
)
;
if
(
str_contains
(
$r
->name, '{closure}'
)
)
{
return
'Closure()';
}
if
(
$class
= \PHP_VERSION_ID >= 80111 ?
$r
->
getClosureCalledClass
(
)
:
$r
->
getClosureScopeClass
(
)
)
{
return
sprintf
(
'%s::%s()',
$class
->name,
$r
->name
)
;
}
return
$r
->name.'()';
}
if
(
method_exists
(
$callable
, '__invoke'
)
)
{
return
sprintf
(
'%s::__invoke()',
$callable
::
class
)
;
}
throw
new
\
InvalidArgumentException
(
'Callable is not describable.'
)
;
}
throw
new
\
LogicException
(
sprintf
(
'Callback for %s "%s" is not callable in the current scope.',
$this
->
getAttribute
(
'type'
)
,
$this
->
getAttribute
(
'name'
)
)
, 0,
$e
)
;
}
$r
=
new
\
ReflectionFunction
(
$closure
)
;
if
(
false !==
strpos
(
$r
->name, '{closure}'
)
)
{
return
$this
->reflector =
[
$r
,
$callable
, 'Closure'
]
;
}
if
(
$object
=
$r
->
getClosureThis
(
)
)
{
$callable
=
[
$object
,
$r
->name
]
;
$callableName
=
(
\
function_exists
(
'get_debug_type'
)
?
get_debug_type
(
$object
)
: \
get_class
(
$object
)
)
.'::'.
$r
->name;
}
elseif
(
\PHP_VERSION_ID >= 80111 &&
$class
=
$r
->
getClosureCalledClass
(
)
)
{
$callableName
=
$class
->name.'::'.
$r
->name;
}
elseif
(
\PHP_VERSION_ID < 80111 &&
$class
=
$r
->
getClosureScopeClass
(
)
)
{
$callableName
=
(
\
is_array
(
$callable
)
?
$callable
[
0
]
:
$class
->name
)
.'::'.
$r
->name;
}
else
{
$callable
=
$callableName
=
$r
->name;
}
if
(
$checkVisibility
&& \
is_array
(
$callable
)
&&
method_exists
(
...
$callable
)
&& !
(
new
\
ReflectionMethod
(
...
$callable
)
)
->
isPublic
(
)
)
{
$callable
=
$r
->
getClosure
(
)
;
}