Mainframe Control Freak PHP Dependency Injection Container: Call functions of class objects registered by name

Recommend this page to a friend!
  Info   View files Documentation   View files View files (5)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2021-04-02 (5 months ago) RSS 2.0 feedNot yet rated by the usersTotal: 14 All time: 10,392 This week: 259Up
Version License PHP version Categories
mainframe 1.0.0BSD License7PHP 5, Libraries, Language, Design Pa...
Description Author

This package can call functions of class objects registered by name.

It provides a dependency container class that can register classes to be associated by name.

Applications can create objects of those classes specifying the registered names, so they can call their object functions.

Picture of Carlos Artur Curvelo da Matos
  Performance   Level  
Name: Carlos Artur Curvelo da ... is available for providing paid consulting. Contact Carlos Artur Curvelo da ... .
Classes: 17 packages by
Country: Portugal Portugal
Age: 43
All time rank: 323441 in Portugal Portugal
Week rank: 201 Up3 in Portugal Portugal Up
Innovation award
Innovation award
Nominee: 11x

Winner: 2x

Details

Mainframe

Deadly simple object container experiment that makes possible to call any methods existent in the injected objects directly through the container. If more than one object have the called function, all of them are executed. If no methods are found, then the container just ignores the calling.

Installation

As usual, we prefer using Composer for managing dependencies, so this package can be installed using composer require carloswph/mainframe

Usage

Using Mainframe is actually quite simple. Let's consider we have two classes A and B, and want to inject them into the container. Injections can be made either during the container instantiation or thereafter, by using the method add(), as follows.

use Mainframe\Container;

require __DIR__ . '/vendor/autoload.php';

class A
{
	public function __construct() {}

	public function print($string)
	{
		echo $string;
	}

	public function method()
	{
		echo 'C';
	}
}

class B
{
	public function __construct() {}

	public function print()
	{
		echo 'B';
	}

	public function load()
	{
		echo 'Do something';
	}
}

$container = new Container(['class_a' => new A()]); // Class A instance injected as Container array
$container->add('class_b', new B()); // Class B instance being injected after instantiation, through add()

As a matter of controlling objects, all injected objects must have a key. That will allow Mainframe to gather and retrieve all of their methods using Reflection, which will generate a databank where objects and methods names are stored for being called later. Now we have both objects inside the container, we can use all of their methods through the container, directly.

Also, you can specifically target a particular method in a particular instance, by using the virtual method terminal($key, $methodName, $args).

$container->print(); // Calls only class B print()
$container->print('Test'); // Calls both class A and B print() methods
$container->method(); // Calls class A method()
$container->terminal('class_a', 'print', 'Test'); // Calls specifically class A print() and pass 'Test' as argument

More

As an extension of PHP's ArrayObject class, Mainframe is able to accepted any of this class existent methods. However, to make it easier, additional aliases will be created for managing the injected objects.

  Files folder image Files  
File Role Description
Files folder image.github (1 directory)
Files folder imagesrc (1 file)
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file composer.lock Data Auxiliary data
Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files  /  .github  
File Role Description
Files folder imageworkflows (1 file)

  Files folder image Files  /  .github  /  workflows  
File Role Description
  Accessible without login Plain text file codacy-analysis.yml Data Auxiliary data

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

 Version Control Unique User Downloads Download Rankings  
 100%
Total:14
This week:0
All time:10,392
This week:259Up
For more information send a message to info at phpclasses dot org.