interface MoneyStorage {
}
class BankAccount implements MoneyStorage {
public function __construct(Logger $logger, $account) ...
}
return [
// Binding
MoneyStorage::class => object(BankAccount::class),
// is actually
MoneyStorage::class => get(BankAccount::class),
// or
MoneyStorage::class => object(BankAccount::class)
->inherit(true),
// Binding + override autowiring
MoneyStorage::class => object(BankAccount::class)
->constructorParameter('account', 123),
// is actually
MoneyStorage::class => get(BankAccount::class),
BankAccount::class => object()
->constructorParameter('account', 123),
// or
MoneyStorage::class => object(BankAccount::class)
->inherit(true)
->constructorParameter('account', 123),
// Binding (but actually inherit + overrides autowiring)
'money' => object(BankAccount::class)
->constructorParameter('account', 123),
// is actually
'money' => object(BankAccount::class)
->autowiring()
->constructorParameter('account', 123),
// or
'money' => object(BankAccount::class)
->inherit(true)
->constructorParameter('account', 123),
// Inherit + override
'foo' => object('money')
->constructorParameter('account', 123),
// is actually
'foo' => inherit('money')
->constructorParameter('account', 123),
// or
'foo' => object('money')
->inherit(true)
->constructorParameter('account', 123),
// Complete override
'foo' => object(BankAccount::class)
->constructor(Logger::class, 123),
// can be
'foo' => object('money')
->inherit(false)
->constructor(Logger::class, 123),
];
Cons:
- can't redeclare something from scratch
- non-obvious inheritance
- nested definitions are not declared from scratch -> weird
return [
MoneyStorage::class => get(BankAccount::class),
MoneyStorage::class => object(BankAccount::class)
->inherit()
->constructorParameter('account', 123),
'money' => object(BankAccount::class)
->inherit()
->constructorParameter('account', 123),
'foo' => object()
->inherit('money')
->constructorParameter('account', 123),
'foo' => object(Foo::class)
->inherit('money')
->constructorParameter('account', 123),
'foo' => object(BankAccount::class)
->constructor(Logger::class, 123),
];