Brick\Reflection
, (*1)
A collection of low-level tools to extend PHP reflection capabilities., (*2)
, (*3)
Installation
This library is installable via Composer:, (*4)
composer require brick/reflection
Requirements
This library requires PHP 8.1 or later., (*5)
Project status & release process
This library is still under development., (*6)
The current releases are numbered 0.x.y
. When a non-breaking change is introduced (adding new methods, optimizing
existing code, etc.), y
is incremented., (*7)
When a breaking change is introduced, a new 0.x
version cycle is always started., (*8)
It is therefore safe to lock your project to a given release cycle, such as 0.6.*
., (*9)
If you need to upgrade to a newer release cycle, check the release history
for a list of changes introduced by each further 0.x.0
version., (*10)
Documentation
Here is a brief overview of the classes in this package., (*11)
This class is a collection of tools that build on top of PHP's reflection classes to provide additional functionality., (*12)
Just create an instance of ReflectionTools
and you can use the following methods:, (*13)
-
getClassMethods()
returns reflections of all the non-static methods that make up one object, including private methods of parent classes.
-
getClassProperties()
returns reflections of all the non-static properties that make up one object, including private properties of parent classes.
-
getClassHierarchy()
returns the hierarchy of classes, starting from the first ancestor and ending with the class itself.
-
getReflectionFunction()
returns a reflection object for any callable.
-
getFunctionName()
returns a meaningful name for the given function, including the class name if it is a method.
-
exportFunctionSignature()
exports a function's signature, such as public function foo(string $bar): int
.
ImportResolver
ImportResolver resolves class names to their fully qualified name, taking into account the current namespace and use
statements of the PHP file they were used in., (*14)
This is particularly useful for parsing annotations such as @param ClassName $foo
, where the FQCN of ClassName depends on the file it appears in, for example:, (*15)
<?php
namespace App;
use Foo\Bar;
use Foo\Bar\Baz as Alias;
class Test {
}
You can create a resolver by passing any reflection object belonging to the PHP file as a context: a ReflectionClass
, a ReflectionClassConstant
, a ReflectionProperty
, a ReflectionMethod
or a ReflectionParameter
:, (*16)
use Brick\Reflection\ImportResolver;
$class = new ReflectionClass(App\Test::class);
$resolver = new ImportResolver($class);
echo $resolver->resolve('\Some\FQCN\Class'); // Some\FQCN\Class
echo $resolver->resolve('Something'); // App\Something
echo $resolver->resolve('Something\Else'); // App\Something\Else
echo $resolver->resolve('Bar'); // Foo\Bar
echo $resolver->resolve('Bar\tender'); // Foo\Bar\tender
echo $resolver->resolve('Alias'); // Foo\Bar\Baz
echo $resolver->resolve('Alias\ooka'); // Foo\Bar\Baz\ooka