Download the PHP package stubbles/ioc without Composer
On this page you can find all versions of the php package stubbles/ioc. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Package ioc
Short Description Dependency injection.
License BSD-3-Clause
Homepage http://stubbles.net/
Informations about the package ioc
stubbles/ioc
Dependency injection.
Build status
Installation
stubbles/ioc is distributed as Composer package. To install it as a dependency of your package use the following command:
composer require "stubbles/ioc": "^11.0"
Requirements
stubbles/ioc requires at least PHP 8.2.
Inversion of Control
stubbles/ioc provides a very simple-to-use but still powerful inversion of control container, which supports constructor and setter based dependency injection. The IoC container of stubbles/ioc is modeled after Google Guice and makes use of type hinting annotations. If you've never heard of type hinting or annotations, you should at first read the sections on these two topics:
- Section on 'type hinting' in the PHP manual
- Annotations Section on annotations in the stubbles/reflect.
The example code
Imagine, you are building a car configurator. To follow the rules of good design, you define interfaces for all components of a car and provide several classes that implement these components.
The interfaces in you application include:
The implementations are:
Without the dependency injection framework
To create a new instance of an implementation of Car
the following code is
required:
Creating objects manually like this has several drawbacks:
- Your application is bound to the concrete implementations instead of the interfaces
- Changing the implementation means changing existing code, which might break it
- The creation of objects is scattered throughout your application
Of course, real applications have a lot more classes, so things only get worse then.
Enter 'Inversion of Control'
stubbles/ioc tries to solve these problems by providing functionality to handle all dependency injections for you. This keeps your application clean of boilerplate code.
Furthermore, it allows you to centralize and/or modularize the definition of the concrete implementations for your interfaces or abstract types.
A simple example
To define the concrete implementations is done using an instance of stubbles\ioc\Binder
:
In this short code snippet, you bound the interfaces from the example above to their concrete implementations.
If you now need an instance of the engine, you use the binder to create a
stubbles\ioc\Injector
, which can be used to create the desired Engine
:
This code snippet will now display:
As desired, it created an instance of the concrete implementation, that you bound to the interface.
Next, you probably want to get an instance of Car
using the same approach:
stubbles/ioc created a new instance of BMW
, as you bound it to Car
, and as
the constructor of BMW
requires a Tire
and an Engine
instance, it created
these instances as well. To determine the concrete classes to use, stubbles/ioc
used the bindings you defined in the stubbles\ioc\Binder
instance.
What you also can see is, that Stubbles did not inject an object into the
$driver
property, although you specified a binding for Person
. stubbles/ioc
will never inject any dependencies via setter methods.
Further features
- Optional injection
- Implicit bindings
- Default implementations
- Inject instances
- Singletons
- Named parameters
- Constant values
- List bindings
- Map bindings
- Closure bindings
- Injection providers
- Create the whole application
- Application properties
- Runtime environment
All versions of ioc with dependencies
stubbles/sequence Version ^10.1
stubbles/values Version ^11.0
stubbles/reflect Version ^10.0