PHP code example of david2m / syringe

1. Go to this page and download the library: Download david2m/syringe 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/ */

    

david2m / syringe example snippets


class UserMapper
{
}

$mapper = $injector->make('UserMapper');

class PdoAdapter
{
}

// UserMapper.php
public function __construct(PdoAdapter $pdoAdapter)
{
}

$mapper = $injector->make('UserMapper');

class PdoAdapter
{
  public function __construct($host, $user, $password, $schema)
  {
  }
}

$constructor = $injector->getConstructor('PdoAdapter');

// Setting one argument
$constructor->setArgument('host', 'localhost');

// Setting multiple arguments
$constructor->addArguments([
  'host' => 'localhost',
  'user' => 'david'
]);

$injector
  ->getMethod('PdoAdapter', 'someMethod')
  ->setArgument('name', 'value');

$injector->make('PdoAdapter', [
  'host' => 'localhost',
  'user' => 'david'
]);

$injector
  ->getConstructor('PdoAdapter')
  ->setArgument('user', function()
  {
    return 'bob';
  });

class UserMapper
{
  public function __construct(PdoAdapter $pdoAdapter)
  {
  }
}

$injector
  ->getConstructor('UserMapper')
  ->setArgument('pdoAdapter', 'PdoAdapter');

class UserMapper
{
  public function __construct(PdoAdapter $pdoAdapter)
  {
  }
}

class Logger
{
  public function __construct(PdoAdapter $pdoAdapter)
  {
  }
}

$injector
  ->getConstructor('PdoAdapter')
  ->addArguments([
      'host' => 'localhost',
      'user' => 'local_user',
      'password' => 'local_password',
      'schema' => 'local_database_name'
    ]);

$injector
  ->getConstructor('PdoAdapter#remote')
  ->addArguments([
      'host' => '103.243.0.78',
      'user' => 'remote_user',
      'password' => 'remote_password',
      'schema' => 'remote_database_name'
    ]);

$injector
  ->getConstructor('Logger')
  ->setArgument('pdoAdapter', 'PdoAdapter#remote');

$mapper = $injector->make('UserMapper');
$logger = $injector->make('Logger');

interface DatabaseAdapterInterface
{
}

class PdoAdapter implements DatabaseAdapterInterface
{
}

// UserMapper.php
public function __construct(DatabaseAdapterInterface $dbAdapter)
{
}

$injector->setMapping('DatabaseAdapterInterface', 'PdoAdapter');

// You can also add multiple mappings at once
$injector->addMappings([
  'DatabaseAdapterInterface' => 'PdoAdapter',
  'AbstractClassName' => 'AnotherConcreteImplementation'
]);

// PdoAdapter.php
public function connect()
{
}

$injector
  ->getMethod('PdoAdapter', 'connect')
  ->addCall();

$pdoAdapter = $injector->make('PdoAdapter');

// The regular expression ^PdoAdapter$ will match the classname PdoAdapter
$injector->setFactory('^PdoAdapter$', function()
{
  return new PdoAdapter('localhost', 'david', 'mypassword', 'my_database_name');
});

$pdoAdapter = $injector->make('PdoAdapter'); // Factory instantiates the object.

namespace Service;

class Recognition
{
}

class Shopping
{
}

class ServiceFactory
{
  public function create($className)
  {
    // Instantiate and return the object.
  }
}

$injector->setFactory('^Service\\', function($className, ServiceFactory $serviceFactory)
{
  return $serviceFactory->create($className);
});

$recognition = $injector->make('Service\Recognition');
$shopping = $injector->make('Service\Shopping');

$injector->make('PdoAdapter');

// Is the same as
$injector->make('PdoAdapter#default');

$injector
  ->getConstructor('PdoAdapter')
  ->addArguments([
      'host' => 'localhost',
      'user' => 'local_user',
      'password' => 'local_password',
      'schema' => 'local_database_name'
    ]);

$injector
  ->getConstructor('PdoAdapter#remote')
  ->addArguments([
      'host' => '103.243.0.78',
      'user' => 'remote_user',
      'password' => 'remote_password',
      'schema' => 'remote_database_name'
    ]);

$localPdoAdapter = $injector->make('PdoAdapter');
$remotePdoAdapter = $injector->make('PdoAdapter#remote');

var_dump($localPdoAdapter === $remotePdoAdapter); // bool(false)

$userOne = $injector->make('Entity\User');
$userTwo = $injector->make('Entity\User');

var_dump($userOne === $userTwo); // bool(true)

$injector->singleton('Entity\User', false);

$userOne = $injector->make('Entity\User');
$userTwo = $injector->make('Entity\User');

var_dump($userOne === $userTwo); // bool(false)

$injector->share([$pdoAdapter]);

$injector->share(['remote' => $remotePdoAdapter]);

// To retrieve the $remotePdoAdapter
$remotePdoAdapter = $injector->make('PdoAdapter#remote');