Download the PHP package jasny/reflection-factory without Composer
On this page you can find all versions of the php package jasny/reflection-factory. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download jasny/reflection-factory
More information about jasny/reflection-factory
Files in jasny/reflection-factory
Package reflection-factory
Short Description Abstract factory for PHP Reflection
License MIT
Informations about the package reflection-factory
Jasny Reflection factory
Factory to use in dependency injection when using PHP Reflection.
Why use a factory instead or just doing new ReflectionClass()
?
Dependency injection might seem like making things needlessly complex. However it's a key component in building maintainable (and testable) code.
Using new
within your classes creates a strong coupling between classes. This makes it more difficult when writing
unit tests because there is no opertunity to mock the reflection. In practice this means that a class using
ReflectionClass
can only be tested with real, existing classes.
Using ReflectionFactory
with dependency injection, allows you to inject a mock of the factory instead. This in
term allows you to create mock Reflection objects, for non-existing classes, functions, properties, etc.
Installation
composer require jasny/reflection-factory
Usage
Example use case
Without dependency injection
But writing the test is hard, as it doesn't allow mocking. Instead we need to create a SomeToolTestFooSupport
class
just to test this feature.
In the unit test we do
Adding one test class isn't so bad. But consider we need to add one per test, it quickly becomes a mess.
With dependency injection
Dependency injection adds a little overhead to the class as we need to pass the reflection factory to SomeTool
.
In the unit test, we mock the ReflectionClass
and ReflectionFactory
. The tests class FakeClass
doesn't need
to exist.
Methods
Method | Reflection class |
---|---|
reflectClass |
ReflectionClass |
reflectClassConstant |
ReflectionClassConstant |
reflectZendExtension |
ReflectionZendExtension |
reflectExtension |
ReflectionExtension |
reflectFunction |
ReflectionFunction |
reflectMethod |
ReflectionMethod |
reflectObject |
ReflectionObject |
reflectParameter |
ReflectionParameter |
reflectProperty |
ReflectionProperty |
reflectGenerator |
ReflectionGenerator |
Some PHP functions have been wrapped, so they can be mocked
Method | Function |
---|---|
functionExists |
function_exists |
classExists |
class_exists |
methodExists |
method_exists |
propertyExists |
property_exists |
extensionLoaded |
extension_loaded |
isA |
is_a |
isCallable |
is_callable |