kyrill / php-di-container
A php dependency injection container
Requires
- php: >=8.1
README
Dependency injection container in PHP
This is a simple automatic dependency injection container in PHP.
Basic setup
To install this package, run the following command in the root of your project:
composer require kyrill/php-di-container
Usage
Create a container
You can create a container by instantiating the Container
class.
<?php use Kyrill\DIContainer\Container; $container = new Container();
Register a class
Register a class with a function
You can register a class with a function. First give the clas an unique name, then put the class: "class definition" in the function in the class definitions gave it the namespace of the class and the arguments. after that define if the class is a singleton or not. If you don't want to use arguments you can leave the array empty.
<?php $container->register('name', new ClassDefinition('namespace\\classname/', ['argument1', 'argument2'], true));
Register classes by a file
You can make a json file with the following structure, to register the classes, aliases or interfaces:
{ "services": { "namespace\\classname": { "arguments": { "test": "\\Kyrill\\PhpDiContainer\\TestInterface", "foo": "bar" } }, "namespace\\alias": { "class": "Kyrill\\PhpDiContainer\\Test", "arguments": { "test": "Kyrill\\PhpDiContainer\\TestInterface", "foo": "bar" } } } }
You can use aliases to register classes or interfaces. Aliases are useful if you want to use a class or interface with a different name. For aliases and interfaces you have to use the class
key. The arguments
key is optional. If you want to use a class or interface without arguments.
Register class by function
To register the file you need to make a FileReader
class. This class needs to implement the FileReaderInterface
. You can register the file by using the registerFile
function. By default there is a JsonFileReader
class. This class reads a json file and registers the classes or interfaces. But you can make your own FileReader
class.
<?php $classRegister = new ClassRegistar(); $classRegister->registerFile('.\di.json', new JsonFileReader(), $container);
Get a class
You can get a class by using the resolve
function. If want to get an alias you just put the aliasname with quotes like this: 'aliasname' in the function.
<?php $container->resolve(Classname::class);
make your own FileReader
To make your own FileReader
class you need to implement the FileReaderInterface
. This interface has one function readFile
. This function needs to return an array with the classes, aliases or interfaces.
License
This project is licensed under the MIT License - see the LICENSE.md file for details