Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add make() method #11

Merged
merged 3 commits into from Jun 20, 2020
Merged

Add make() method #11

merged 3 commits into from Jun 20, 2020

Conversation

feryardiant
Copy link
Member

Ability to resolve an instance without adding it to the container stack.

Let say you have a class like this

class InstantiableClass
{
/**
* @var stdClass
*/
public $dummy;
public function __construct($dummy)
{
$this->dummy = $dummy;
}
}

$container->make(InstantiablleClass::class); // Should get InstantiablleClass instance.

If you have callable class like this

class CallableClass
{
/**
* @var stdClass
*/
public $dummy;
public function __construct($dummy)
{
$this->dummy = $dummy;
}
public function __invoke(AbstractFoo $foo)
{
return $foo;
}
}

$container->make(CallableClass::class); // Should get returns value o CallableClass::__invoke().

Note that both InstantiableClass and CallableClass constructor depends on dummy container and CallableClass::__invoke() method depends on AbstractFoo instance. It will automatically resolved if you already have both dummy and AbstractFoo container.

$container->set('dummy', Dummy::class);
$container->set(AbstractFoo::class, ConcreteBar::class);

Otherwise it will throw Psr\Container\NotFoundExceptionInterface

Signed-off-by: Fery Wardiyanto <ferywardiyanto@gmail.com>
@feryardiant feryardiant added the enhancement New feature or request label Jun 19, 2020
@feryardiant
Copy link
Member Author

feryardiant commented Jun 19, 2020

I think it should be useful if we could make an instance by condition, let say:

$container->make(SomeClass::class, function ($instance) {
    if ($instance instanceof CertainInterface) {
        // Returns an array of the instance and method required by the interface.
        return [$instance, 'handle'];
    }

    // Returns null to pass the object as is
    return null;
});

Signed-off-by: Fery Wardiyanto <ferywardiyanto@gmail.com>
@feryardiant feryardiant self-assigned this Jun 20, 2020
See: #11
Signed-off-by: Fery Wardiyanto <ferywardiyanto@gmail.com>
@feryardiant feryardiant merged commit b1b4410 into master Jun 20, 2020
@feryardiant feryardiant deleted the make branch June 20, 2020 00:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant