Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Trex Reflection Laravel Package

raphhh/trex-reflection

Lightweight PHP reflection helper focused on analyzing types, classes and members with a cleaner API than native Reflection. Great for tooling, static analysis, and code generation tasks—extract signatures, docblocks, visibility, and metadata with minimal boilerplate.

View on GitHub
Deep Wiki
Context7

TRex Reflection

Latest Stable Version Build Status Scrutinizer Quality Score Code Coverage Dependency Status Total Downloads Reference Status License

PHP tool to reflect callables an types.

Installation

Use composer command:

$ composer require raphhh/trex-reflection

Documentation

CallableReflection

You can use CallableReflection to inspect and call a callable, like a callback or a Closure for example.

All kind of callable

You can know which kind of callable is given.

Closure
$reflect = new CallableReflection(function(){});
$reflect->isClosure(); //true
Function
$reflect = CallableReflection('in_array')
$reflect->isFunction(); //true
Static method
$reflect = new CallableReflection('\DateTime::createFromFormat');
$reflect->isMethod(); //true
$reflect->isStaticMethod(); //true
$reflect = new CallableReflection(array('\DateTime', 'createFromFormat'));
$reflect->isMethod(); //true
$reflect->isStaticMethod(); //true
Instance method
$reflect = new CallableReflection(array(new \DateTime(), 'modify'));
$reflect->isMethod(); //true
$reflect->isInstanceMethod(); //true
Invoked object
class Bar{
    function __invoke(){}
}

$reflect = new CallableReflection(new Bar());
$reflect->isInvokedObject(); //true

Retrieve contexts

You can retrieve the callable, like the object or the method name for example.

Closure
$reflect = new CallableReflection(function(){});
$reflect->getClosure(); //closure
Function
$reflect = new CallableReflection('in_array')
$reflect->getFunctionName(); //'in_array'
Static method
$reflect = new CallableReflection('\DateTime::createFromFormat');
$reflect->getClassName(); //'DateTime'
$reflect->getMethodName(); //'createFromFormat'
$reflect = new CallableReflection(array('\DateTime', 'createFromFormat'));
$reflect->getClassName(); //'DateTime'
$reflect->getMethodName(); //'createFromFormat'
Instance method
$reflect = new CallableReflection(array(new \DateTime(), 'modify'));
$reflect->getClassName(); //'DateTime'
$reflect->getObject(); //DateTime instance
$reflect->getMethodName(); //'modify'
Invoked object
class Bar{
    function __invoke(){}
}

$reflect = new CallableReflection(new Bar());
$reflect->getClassName(); //'Bar'
$reflect->getObject(); //Bar instance

Invoke callable

You can invoke every kind of callable in a same way.

With a list of args

This method calls the method and give to it all its args.

$reflect = new CallableReflection('in_array')
$reflect->invoke(1, [0, 1]); //true

With an array of args

This method allows to map each value of an array with every params of a function. Useful to use dynamic args with func_get_args().

$reflect = new CallableReflection('in_array')
$reflect->invoke([1, [0, 1]]); //true

With a map of args

This method allows to map the keys of an array with the name of the params of a function. So, the order of the args has no importance.


$closure = function($arg1, $arg2){
    return [$arg1, $arg2];
}

$reflect = new CallableReflection($closure)
$reflect->invokeA(['arg2' => 'arg2', 'arg1' => 'arg1'])); //['arg1', 'arg2']

Retrieve the associated reflection class

Retrieve the ReflectionFunctionAbstract of the callable.

For a function or a closure
$reflect = new CallableReflection('in_array');
$reflect->getReflector(); //ReflectionFunction
For a method
$reflect = new CallableReflection(array('\DateTime', 'createFromFormat'));
$reflect->getReflector(); //ReflectionMethod
For a class

Note that for a class, we get a ReflectionMethod for the __invoke method of the current object, and not a ReflectionClass.


class Bar{
    function __invoke(){}
}

$reflect = new CallableReflection(new Bar());
$reflect->getReflector(); //ReflectionMethod

TypeReflection

Reflection on the type of a variable or function.

What is a type?

A type is a string defined by a specific value related to one of the PHP types.

$typeReflection = new TypeReflection('int');
$typeReflection->getType(); //"int"
$typeReflection->getStandardizedType(); //"integer"

If you work with a variable, you can use TypeReflection::createFromVariable($variable)

$foo = new stdClass();
$typeReflection = TypeReflection::createFromVariable($foo);
$typeReflection->getType(); //"stdClass"
$typeReflection->getStandardizedType(); //"object"

Note the TypeReflection is case insensitive.

Standardized types

TypeReflection standardizes types with following values:

  • void
  • mixed
  • null
  • boolean
  • string
  • integer
  • float
  • number
  • scalar
  • array
  • object
  • resource
  • callable
  • unknown type

Valid any type

Recognition
$typeReflection = new TypeReflection('string');
$typeReflection->isValid(); //true
$typeReflection = new TypeReflection('foo');
$typeReflection->isValid(); //false
boolean
$typeReflection = new TypeReflection('bool');
$typeReflection->isBoolean(); //true
$typeReflection = new TypeReflection('boolean');
$typeReflection->isBoolean(); //true
string
$typeReflection = new TypeReflection('string');
$typeReflection->isString(); //true
integer
$typeReflection = new TypeReflection('int');
$typeReflection->isInteger(); //true
$typeReflection = new TypeReflection('integer');
$typeReflection->isInteger(); //true
$typeReflection = new TypeReflection('long');
$typeReflection->isInteger(); //true
float
$typeReflection = new TypeReflection('float');
$typeReflection->isFloat(); //true
$typeReflection = new TypeReflection('double');
$typeReflection->isFloat(); //true
$typeReflection = new TypeReflection('real');
$typeReflection->isFloat(); //true
number

Any integer or float value.

scalar

Any boolean, string or number value.

array
$typeReflection = new TypeReflection('array');
$typeReflection->isArray(); //true
$typeReflection = new TypeReflection('int[]');
$typeReflection->isArray(); //true
object
$typeReflection = new TypeReflection('object');
$typeReflection->isObject(); //true
$typeReflection = new TypeReflection('Datetime');
$typeReflection->isObject(); //true
resource
$typeReflection = new TypeReflection('resource');
$typeReflection->isResource(); //true
callable
$typeReflection = new TypeReflection('callable');
$typeReflection->isCallable(); //true
void
$typeReflection = new TypeReflection('void');
$typeReflection->isVoid(); //true
null
$typeReflection = new TypeReflection('null');
$typeReflection->isNull(); //true
mixed
$typeReflection = new TypeReflection('mixed');
$typeReflection->isMixed(); //true

Retrieve a standard notation

$typeReflection = new TypeReflection('bool');
$typeReflection->getStandardizedType(); //boolean
$typeReflection = new TypeReflection('int');
$typeReflection->getStandardizedType(); //integer
$typeReflection = new TypeReflection('real');
$typeReflection->getStandardizedType(); //float
$typeReflection = new TypeReflection('int[]');
$typeReflection->getStandardizedType(); //array
$typeReflection = new TypeReflection('Datetime');
$typeReflection->getStandardizedType(); //object
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport