PHP Classes

PHP Object Factory: Create objects of given types defined by name

Recommend this page to a friend!
  Info   View files Example   View files View files (4)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Ratings Unique User Downloads Download Rankings
Not yet rated by the usersTotal: 99 All time: 9,749 This week: 148Up
Version License PHP version Categories
objectfactory 1.0.0BSD License7Data types, Language, PHP 7


This package can be used to create objects of given types defined by interface.

It provides a means to register an interface that will be associated to a class that will be used to create the object when the getInstance or getShared functions of the factory are called passing the identification of the interface.

The package can also register an interface provider by associating to a callback function, so when the getInstance or getSharedInstance functions of the factory is called, it will invoke a given callback function that takes as parameter a string with a name that can be used by the callback function to determine what is the class of the object that will be created.

Innovation Award
PHP Programming Innovation award nominee
March 2020
Number 4
Sometimes applications need to implement a certain functionality in a dynamic way.

This means that the way that functionality will be implemented is not determined initially when the current PHP script starts, as it depends on factors that will be evaluated later during the execution of the script.

This package provides a solution to implement that possibility by providing means for registering interfaces dynamically to implement the desired functionality.

Manuel Lemos
Picture of Aleksandar Zivanovic
  Performance   Level  
Name: Aleksandar Zivanovic <contact>
Classes: 16 packages by
Country: Serbia Serbia
Age: 29
All time rank: 16277 in Serbia Serbia
Week rank: 373 Up5 in Serbia Serbia Up
Innovation award
Innovation award
Nominee: 4x


Object Factory

In this document you can find proper usage of this library.


This library is used to easily retrieve instance of certain object without the need to provide all of its dependencies.


  • PHP: >=7.4


This library ensure to provide proper instance of object implementing certain interface, or being certain type of a class. Dependencies are required to be complex type as primitive ones (string, int, float, bool) cannot be exactly auto determined. There are two ways of defining "provider" for certain interface.


First approach is providing simple map between interface and class itself, to do so we need to call `registerInterfaceClass` method.

interface IModel {}
class Model implements IModel {}

\ObjectFactory\Factory::registerInterfaceClass(IModel::class, Model::class);

Note: Use this only when providing class has complex typed dependencies, providing class with primitive types will cause exception to be thrown.
Note: Library handle circular dependencies.

Another approach is using provider callback- function that is called when instance is requested, to achieve this we need to call `registerInterfaceInstanceProvider`. This approach is usually useful when object depends on primitive types.

interface IDatabase {}
class MySQL implements IDatabase
    public function __constructor(string $host, string $username, string $password, string $schema) {}

class PostgreSQL implements IDatabase
    public function __constructor(string $host, string $username, string $password, string $schema, string $role = null) {}

\ObjectFactory\Factory::registerInterfaceInstanceProvider(IDatabase::class, function (): IDatabase {
    switch (getenv('database.driver')) {
        case 'psql':
            return new PostgreSQL('localhost', 'admin', '', 'db', 'admin');
        case 'mysql':
            return new MySQL('localhost', 'root', '', 'database');

There are two ways to retrieve instance of certain type. One is `getInstance` which always returns new instance of requested type.

And there is also another way by using `getSharedInstance` which always return signleton instance of requested model.

$nonShared = \ObjectFactory\Factory::getInstance(IModel::class);
$shared1 = \ObjectFactory\Factory::getSharedInstance(IModel::class);
$shared2 = \ObjectFactory\Factory::getSharedInstance(IModel::class);

var_dump($nonShared === $shared1, $shared1 === $shared2); // false, true will be the output.

  Files folder image Files  
File Role Description
Files folder imagesrc (1 file)
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file example.php Example Class source
Accessible without login Plain text file Doc. Documentation

  Files folder image Files  /  src  
File Role Description
  Plain text file Factory.php Class Class source

 Version Control Unique User Downloads Download Rankings  
This week:0
All time:9,749
This week:148Up