2017 © Pedro Peláez
 

library ioc

Dependency injection.

image

stubbles/ioc

Dependency injection.

  • Wednesday, August 10, 2016
  • by mikey179
  • Repository
  • 2 Watchers
  • 1 Stars
  • 767 Installations
  • PHP
  • 5 Dependents
  • 1 Suggesters
  • 0 Forks
  • 0 Open issues
  • 59 Versions
  • 9 % Grown

The README.md

stubbles/ioc

Dependency injection., (*1)

Build status

Tests, (*2)

Latest Stable Version Latest Unstable Version, (*3)

Installation

stubbles/ioc is distributed as Composer package. To install it as a dependency of your package use the following command:, (*4)

composer require "stubbles/ioc": "^11.0"

Requirements

stubbles/ioc requires at least PHP 8.2., (*5)

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:, (*6)

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., (*7)

The interfaces in you application include:, (*8)

interface Car {
    public function moveForward($miles);
}
interface Person {
    public function sayHello();
}
interface Tire {
    public function rotate();
}
interface Engine {
    public function start();
}

The implementations are:, (*9)

class BMW implements Car {
    private $driver;
    private $engine;
    private $tire;

    public function __construct(Engine $engine, Tire $tire, Person $driver) {
        $this->engine = $engine;
        $this->tire   = $tire;
        $this->driver = $driver;
    }
    public function moveForward($miles) {
        $this->driver->sayHello();
        $this->engine->start();
        $this->tire->rotate();
    }
}

class Schst implements Person {
    public function sayHello() {
        echo "My name is Stephan\n";
    }
}

class Goodyear implements Tire {
    public function rotate() {
        echo "Rotating Goodyear tire\n";
    }
}

class TwoLitresEngine implements Engine {
    public function start() {
        echo "Starting 2l engine\n";
    }
}

Without the dependency injection framework

To create a new instance of an implementation of Car the following code is required:, (*10)

    $tire   = new Goodyear();
    $engine = new TwoLitresEngine();
    $schst  = new Schst();

    $bmw    = new BMW($engine, $tire, $schst);
    $bmw->moveForward(50);

Creating objects manually like this has several drawbacks:, (*11)

  • 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., (*12)

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., (*13)

Furthermore, it allows you to centralize and/or modularize the definition of the concrete implementations for your interfaces or abstract types., (*14)

A simple example

To define the concrete implementations is done using an instance of stubbles\ioc\Binder:, (*15)

$binder = new \stubbles\ioc\Binder();
$binder->bind('Car')->to('BMW');
$binder->bind('Tire')->to('Goodyear');
$binder->bind('Person')->to('Schst');
$binder->bind('Engine')->to('TwoLitresEngine');

In this short code snippet, you bound the interfaces from the example above to their concrete implementations., (*16)

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:, (*17)

$injector = $binder->getInjector();
$engine = $injector->getInstance('Engine');
var_dump($engine);

This code snippet will now display:, (*18)

object(TwoLitresEngine)#48 (0) {
}

As desired, it created an instance of the concrete implementation, that you bound to the interface., (*19)

Next, you probably want to get an instance of Car using the same approach:, (*20)

    $injector = $binder->getInjector();
    $car = $injector->getInstance('Car');
    var_dump($car);
object(BMW)#33 (3) {
  ["driver:private"]=>
  NULL
  ["engine:private"]=>
  object(TwoLitresEngine)#37 (0) {
  }
  ["tire:private"]=>
  object(Goodyear)#40 (0) {
  }
}

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., (*21)

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., (*22)

Further features

The Versions

10/08 2016

dev-master

9999999-dev http://stubbles.net/

Dependency injection.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

30/07 2016
22/07 2016
06/07 2016

v7.1.1

7.1.1.0 http://stubbles.net/

Dependency injection.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

08/06 2016

v7.1.0

7.1.0.0 http://stubbles.net/

Dependency injection.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

15/01 2016

v7.0.0

7.0.0.0 http://stubbles.net/

Dependency injection.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

01/07 2015

v6.3.0

6.3.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

19/06 2015

v6.2.0

6.2.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

31/05 2015

v6.1.0

6.1.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

28/05 2015

v6.0.0

6.0.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

12/05 2015

v5.5.1

5.5.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

06/05 2015

v5.5.0

5.5.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

22/04 2015

v5.4.1

5.4.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

01/04 2015

v5.4.0

5.4.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

09/03 2015

v5.3.2

5.3.2.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

09/03 2015

v5.3.1

5.3.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

05/03 2015

v5.3.0

5.3.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

16/11 2014

v5.2.0

5.2.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

13/10 2014

v5.1.2

5.1.2.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

03/10 2014

v5.1.1

5.1.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

29/09 2014

v5.1.0

5.1.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

01/09 2014

v5.0.1

5.0.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

17/08 2014

v5.0.0

5.0.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

11/08 2014

v4.1.4

4.1.4.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

10/08 2014

v4.1.3

4.1.3.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

10/08 2014

v4.1.2

4.1.2.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

09/08 2014

v4.1.1

4.1.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

08/08 2014

v4.1.0

4.1.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

06/08 2014

v4.0.2

4.0.2.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

05/08 2014

v4.0.1

4.0.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

31/07 2014

v4.0.0

4.0.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

07/05 2014

v3.5.3

3.5.3.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

07/05 2014

v3.5.2

3.5.2.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

07/05 2014

v3.5.1

3.5.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

06/05 2014

v3.5.0

3.5.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.4.0

 

The Development Requires

11/04 2014

v3.4.4

3.4.4.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

25/03 2014

v3.4.3

3.4.3.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

25/03 2014

v3.4.2

3.4.2.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

22/01 2014

v3.4.1

3.4.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

21/01 2014

v3.4.0

3.4.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

13/01 2014

v3.3.1

3.3.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

12/01 2014

v3.3.0

3.3.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

29/10 2013

v3.2.0

3.2.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

17/09 2013

v3.1.2

3.1.2.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

11/09 2013

v3.1.1

3.1.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

05/05 2013

v3.1.0

3.1.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

02/05 2013

v3.0.0

3.0.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3-Clause

The Requires

  • php >=5.3.0

 

The Development Requires

28/12 2012

v2.1.3

2.1.3.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3

The Requires

  • php >=5.3.0

 

The Development Requires

  • mikey179/vfsstream 1.1.*

30/08 2012

v2.1.2

2.1.2.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3

The Requires

  • php >=5.3.0

 

The Development Requires

  • mikey179/vfsstream 1.1.*

31/07 2012

v2.1.1

2.1.1.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3

The Requires

  • php >=5.3.0

 

The Development Requires

  • mikey179/vfsstream 1.0.*

31/07 2012

v2.1.0

2.1.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3

The Requires

  • php >=5.3.0

 

The Development Requires

  • mikey179/vfsstream 1.0.*

22/05 2012

v2.0.0

2.0.0.0 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3

The Requires

  • php >=5.3.0

 

The Development Requires

  • mikey179/vfsstream 1.0.*

02/05 2012

v2.0.0-beta8

2.0.0.0-beta8 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD-3

The Requires

  • php >=5.3.0

 

The Development Requires

  • mikey179/vfsstream 1.0.*

18/03 2012

2.0.0-beta7

2.0.0.0-beta7 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD

The Requires

  • php >=5.3.0
  • mikey179/vfsstream 1.0.*
  • stubbles/scripts 1.0.*

 

13/03 2012

2.0.0-beta6

2.0.0.0-beta6 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD

The Requires

  • php >=5.3.0
  • mikey179/vfsstream 1.0.*
  • stubbles/scripts 1.0.*

 

12/03 2012

2.0.0-beta5

2.0.0.0-beta5 http://stubbles.net/

Provides base classes for Stubbles packages.

  Sources   Download

BSD

The Requires

  • php >=5.3.0
  • mikey179/vfsstream 1.0.*
  • stubbles/scripts 1.0.*

 

08/03 2012

2.0.0-beta4

2.0.0.0-beta4 http://stubbles.net/

  Sources   Download

BSD

The Requires

  • php >=5.3.0
  • mikey179/vfsstream 1.0.*
  • stubbles/scripts 1.0.*

 

26/02 2012

2.0.0-beta2

2.0.0.0-beta2 http://stubbles.net/

  Sources   Download

BSD

The Requires

  • php >=5.3.0
  • mikey179/vfsstream 1.0.*
  • stubbles/scripts 1.0.*

 

22/02 2012

2.0.0-beta1

2.0.0.0-beta1 http://stubbles.net/

  Sources   Download

BSD

The Requires

  • php >=5.3.0
  • mikey179/vfsstream 1.0.0-beta2
  • stubbles/scripts 1.0.0-beta2