Login   Register  
PHP Classes
elePHPant
Icontem

File: README.md

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of AlexanderC  >  Pyha PHP Dependency Injection Container Using Traits  >  README.md  >  Download  
File: README.md
Role: Documentation
Content type: text/plain
Description: Documentation
Class: Pyha PHP Dependency Injection Container Using Traits
Create objects injecting dependencies using traits
Author: By
Last change:
Date: 1 year ago
Size: 3,012 bytes
 

Contents

Class file image Download
What's dependency injection(DI)?
================================

Just look at the article and watch that awesome video:
http://blog.ircmaxell.com/2013/01/dependency-injection-programming-with.html

How do i register items(services)?
==================================

    If the class does not have any deps- just skip this step!!!

First of all you have to register all dependencies, but keep in mind that:

    class App
    {
        // you can use this trait and implement getInjectables()
        // that returns associative array with named params that
        // could not be skipped or added with defined default values
        use Pyha\DI\Injectable;

        public function getInjectables()
        {
            return [
                'stringHere' => "hello world!"
            ];
        }

        /**
         * @param string $stringHere
         */
        public function __construct(AnyClassHere $thing, $stringHere)
        {

        }
    }

    class Foo
    {
        public function __construct(App $app)
        {

        }
    }
    class Bar extends Foo { }

    // i would like to get it via DI Factory
    class WeWannaGet
    {
        public function __construct(Bar $bar)
        {

        }
    }

    // in order to get this working we need... //

    // 1. register only top dependency
    Pyha\DI\Factory::getInstance()->register(
        new App(new AnyClassHere(), 'string here')
    );
    // or
    Pyha\DI\Factory::getInstance()->register(
            Pyha\DI\Factory::getInstance()->get('App')
        );
    // or (if app does not use injectable trait or do not get named param via getInjectables() method)
    Pyha\DI\Factory::getInstance()->register(
                Pyha\DI\Factory::getInstance()->get('App', ['stringHere' => "hello world!"])
            );

    // that u can use
    Pyha\DI\Factory::getInstance()->get('WeWannaGet'); // to get instance only once, just what an singleton does
    Pyha\DI\Factory::getInstance()->create('WeWannaGet'); // to create new instance each time

To register aliases use addAlias() Factory method.

NOTE: if as a service parameter to the register method is provided an object
by default are registered several service aliases. This are:

	- All Interfaces names implemented
	- All parent classes from extension tree
	- All Traits used

If you do not wannt to register this aliases, take a look at the method prototype:
	
	public function register($name,
                             	 $service,
                             	 $registerSelfAsAlias = true,
                             	 $registerInterfacesAsAliases = true,
                             	 $registerParentsAsAliases = true);

Services ca be objects, closures, string(classes names)

Loading Library
===============

If you are not using Composer you may add to autoloader the lib path or even include the files manualy

Installing via Composer
=======================

To install it via composer just use following command:

    $ composer.phar install