1. Go to this page and download the library: Download miladrahimi/phpcontainer library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
miladrahimi / phpcontainer example snippets
use MiladRahimi\PhpContainer\Container;
$container = new Container();
$container->singleton(DatabaseInterface::class, MySQL::class);
$container->transient(MailerInterface::class, MailTrap::class);
$container->closure('sum', function($a, $b) { return $a + $b; });
$database = $container->get(DatabaseInterface::class); // An instance of MySQL
$mailer = $container->get(MailerInterface::class); // An instance of MailTrap
$sum = $container->get('sum'); // A closure: $sum(6, 7) => 13
use MiladRahimi\PhpContainer\Container;
$container = new Container();
// No (explicit) binding here!
$database = $container->get(MySQL::class);
use MiladRahimi\PhpContainer\Container;
$user = new User();
$user->name = 'Milad';
$container = new Container();
$container->singleton('user', $user);
// OR
$container->transient('user', $user);
use MiladRahimi\PhpContainer\Container;
class Notifier implements NotifierInterface
{
public MailInterface $mail;
public Vonage $vonage;
public string $sender;
public function __constructor(MailInterface $mail, Vonage $vonage, $sender = 'PhpContainer')
{
$this->mail = $mail;
$this->vonage = $vonage;
$this->sender = $sender;
}
}
$container = new Container();
$container->transient(MailInterface::class, MailTrap::class);
$container->transient(NotifierInterface::class, Notifier::class);
$notifier = $container->get(NotifierInterface::class);
print_r($notifier->mail); // $mail would be an instnace of MailTrap (explicit binding)
print_r($notifier->vonage); // $vonage would be an instnace of Vonage (implicit binding)
print_r($notifier->sender); // $sender would be "PhpContainer" (default value)
use MiladRahimi\PhpContainer\Container;
$container = new Container();
$container->singleton(Config::class, function () {
return new JsonConfig('/path/to/config.json');
});
// $config would be auto-injected
$container->singleton(Database::class, function (Config $config) {
return new MySQL(
$config->get('database.host'),
$config->get('database.port'),
$config->get('database.name'),
$config->get('database.username'),
$config->get('database.password')
);
});
use MiladRahimi\PhpContainer\Container;
$container = new Container();
$container->singleton(MailInterface::class, MailTrap::class);
// Direct Closure call
$response = $container->call(function(MailerInterface $mailer) {
return $mailer->send('[email protected]', 'Hello...');
});
// Direct function call
function sendMail(MailerInterface $mailer) {
return $mailer->send('[email protected]', 'Hello...');
}
$response = $container->call('sendMail');
// Direct method call
class UserManager {
function sendMail(MailerInterface $mailer) {
return $mailer->send('[email protected]', 'Hello...');
}
}
$response = $container->call([UserManager::class, 'sendMail']);