Caso semplificato con classe immutabile
final class Secret implements IFoo
{
private $header;
public function __construct(array $header = [])
{
$this->header = $header;
}
public function secret(array $header = []) : string
{
return empty($header) ? $this->header : $header;
}
}
Scenario 1
$secret = new Secret(['a' => 1]);
$secret->secret(); // returns ['a' => 1]
Scenario 2
// Need to instantiate, but don't know the argument
$secret = new Secret();
// Don't still know the argument
// .......
// I know the argument now
$secret->secret(['a' => 1]); // returns ['a' => 1]
Che cosa è OOP?
Lo scenario 2 è utile se hai bisogno di istanziare la classe, ma non conosci l'argomento.
Questo OOP è valido: usa il parametro locale se il parametro globale è vuoto?
Perché, qual è il tuo problema?
Nel contenitore IoC, lego l'interfaccia IFoo alla classe Secret. Ma, nel contenitore IoC, non conosco l'argomento!