1. Go to this page and download the library: Download spiffy/spiffy-inject 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/ */
spiffy / spiffy-inject example snippets
use Spiffy\Inject\Injector;
$i = new Injector();
// assign a parameter is as easy as using ArrayAccess
$i['foo'] = 'bar';
// output is 'bar'
echo $i['foo'];
$i = new Injector();
// setting using the string class name
$i->nject('foo', 'StdClass');
// setting the service directly
$i->nject('foo', new \StdClass());
// setting the service using a closure factory
$i->nject('foo', function() {
return new \StdClass();
});
// setting the service using array configuration
$i->nject('foo', ['StdClass']);
// setting the service using an object that implements ServiceFactory
class StdClassFactory implements ServiceFactory
{
public function createService(Injector $i)
{
return new \StdClass();
}
}
$i->nject('foo', new StdClassFactory());
// each method listed above is identical
// false
$i->has('foo');
$i->nject('foo', new \StdClass());
// true
$i->has('foo');
// assuming the configuration from 'Setting Services' above
// the following retrieves the 'foo' service
$foo = $i->nvoke('foo');
$i = new Injector();
// you can pass constructor parameters to the service
class Foo
{
public function __construct($string, $int)
{
$this->string = $string;
$this->int = $int;
}
}
// the resulting object will have 'string set to 'I am a string'
// and 'int' set to '1'
$i->nject('foo', ['Foo', ['I am a string', 1]]);
$i = new Injector();
// you can pass constructor parameters to the service
class Foo
{
public function __construct($int)
{
$this->int = $int;
}
public function setString($string)
{
$this->string = $string;
}
}
// the resulting object will have 'string set to 'I am a string'
// and 'int' set to '1'
$i->nject('foo', ['Foo',[1],['setString' => 'string']]);
$i = new Injector();
class Bar
{
}
class Foo
{
public function __construct(Bar $bar)
{
$this->bar = $bar;
}
public function setBaz($baz)
{
$this->baz = $baz;
}
}
// set the 'baz' parameter to 'boogly'
$i['baz'] = 'boogly';
// set the 'bar' service to an instance of \Bar
$i->nject('bar', new \Bar());
// create the foo service using array configuration and parameter/service references
$i->nject('foo', ['Foo',['@bar'],['setBaz' => '$baz']]);
// the resulting Foo service would have '$this->bar' set to '\Bar' and '$this->baz' set to 'boogly'
class ArrayObjectFactory implements ServiceFactory
{
private $defaults;
public function __construct(array $defaults)
{
$this->defaults = $defaults;
}
public function createService(Injector $i)
{
return new \ArrayObject($this->defaults);
}
}
$i = new Injector();
// Result is an ArrayObject and *not* an ArrayObjectFactory
$i->nject('ArrayObject', ['ArrayObjectFactory', [['foo' => 'bar']]);
namespace Spiffy\Inject\TestAsset;
use Spiffy\Inject\Annotation as Injector;
/**
* @Injector\Component("inject.test-asset.annotated-component")
*/
class AnnotatedComponent
{
/** @var \StdClass */
private $foo;
/** @var array */
private $params;
/** @var array */
private $setter;
/**
* @Injector\Method({@Injector\Inject("foo"), @Injector\Param("params")})
*/
public function __construct(\StdClass $foo, array $params)
{
$this->foo = $foo;
$this->params = $params;
}
/**
* @Injector\Method({@Injector\Param("setter")})
*
* @param array $setter
*/
public function setSetter($setter)
{
$this->setter = $setter;
}
/**
* @return array
*/
public function getSetter()
{
return $this->setter;
}
/**
* @return \StdClass
*/
public function getFoo()
{
return $this->foo;
}
/**
* @return array
*/
public function getParams()
{
return $this->params;
}
}
use Spiffy\Inject\Generator;
use Spiffy\Inject\Metadata;
$mdf = new Metadata\MetadataFactory();
$md = $mdf->getMetadataForClass('Spiffy\Inject\TestAsset\AnnotatedComponent');
$generator = new Generator\ArrayGenerator();
$i = new Injector();
$i->nject($md->getName(), $generator->generate($md));
$i->nvoke($md->getName()); // instanceof Spiffy\Inject\TestAsset\AnnotatedComponent
namespace My;
use Spiffy\Inject\Injector;
use Spiffy\Inject\ServiceDecorator;
class FooDecorator implements ServiceDecorator
{
public function decorateService(Injector $i, $instance)
{
$instance->bar = 'bar';
$instance->baz = 'baz';
}
}
use Spiffy\Inject\Injector;
$i = new Injector();
$i->nject('foo', new \StdClass());
$i->decorate('foo', new \My\FooDecorator());
$foo = $i->nvoke('foo');
// output is 'barbaz';
echo $foo->bar;
echo $foo->baz;
$i = new Injector();
$i->nject('foo', new \StdClass());
// if we use the $callable available to the closure we receive an instance of the original service
// the \StdClass object would have two properties: 'bar' and 'name'
// the values would be 'bar' and 'foo' respectively
$i->wrap('foo', function(Injector $i, $name, $callable) {
$foo = $callable();
$foo->bar = 'bar';
$foo->name = $name;
return $foo;
});
// we can completely override the original service configuration by skipping the callable
$i->wrap('foo', function(Injector $i, $name, $callable) {
return new \ArrayObject();
});
// output is 'ArrayObject'
echo get_class($i->nvoke('foo'));
namespace My;
use Spiffy\Inject\Injector;
use Spiffy\Inject\ServiceWrapper;
class FooWrapper implements ServiceWrapper
{
public function wrapService(Injector $i, $name, $callable)
{
$foo = $callable();
$foo->bar = 'bar';
$foo->name = $name;
return $foo;
}
}
use Spiffy\Inject\Injector;
$i = new Injector();
$i->nject('foo', new \StdClass());
$i->wrap('foo', new \My\FooWrapper());
$foo = $i->nvoke('foo');
echo $foo->bar; // outputs 'bar'
echo $foo->name; // outputs 'foo'
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.