Hallo,
ich bin gerade dabei ein DI Container zu basteln. Allerdings ist mir etwas aufgefallen was ich nicht ganz nachvollziehen kann. Und zwar bekomme ich 2 unterschiedliche Objekte mit gleicher ID ( var_dump(object) ). Fehlerbehandlungen im Code wurden zwecks Veranschaulichung entfernt. Zum testen wurden Diese auch aus dem Code entfernt um Fehlerquellen auszuschließen.
Folgender Maßen registriere ich die Closures.
Und so werden sie gespeichert und wieder aufgelöst.
Wenn ich allerdings folgendes mache:
Kommt als Ergebnis:
Wie kann es sein das die 2 Objekte unterschiedlich sind obwohl die ID gleich ist? Erst wenn ich das Ergebnis vom Closure return in eine Variable speicher bekommen die beiden Objekte eine unterschiedliche ID. Das Verhalten das ich mir erhofft hatte sind 2 unterschiedliche Objekte und unterschiedlicher Objekt ID.
ich bin gerade dabei ein DI Container zu basteln. Allerdings ist mir etwas aufgefallen was ich nicht ganz nachvollziehen kann. Und zwar bekomme ich 2 unterschiedliche Objekte mit gleicher ID ( var_dump(object) ). Fehlerbehandlungen im Code wurden zwecks Veranschaulichung entfernt. Zum testen wurden Diese auch aus dem Code entfernt um Fehlerquellen auszuschließen.
Folgender Maßen registriere ich die Closures.
PHP-Code:
$objInversionContainer->register('View', function()
{
return (new View('string und so'));
});
$objInversionContainer->register('View2', function()
{
return (new View('string und so2'));
});
PHP-Code:
class Container
{
private $arrRegister = array();
private $arrInstances = array();
public function register($strKey, \Closure $objClosure)
{
if ( ! is_string($strKey))
{
throw new \InvalidArgumentException(sprintf('Invalid argument in %s', __METHOD__));
}
$this->arrRegister[$strKey] = $objClosure;
}
public function resolve($strKey)
{
return (call_user_func($this->arrRegister[$strKey]));
}
}
PHP-Code:
var_dump($objInversionContainer->resolve('View'));
var_dump($objInversionContainer->resolve('View2'));
PHP-Code:
object(Dispendium\Foundation\View\View)[5]
private 'arrTemplatesFolder' => null
private 'strMinifiedFolder' => string 'string und so' (length=13)
private 'blnMinifyTemplates' => boolean true
object(Dispendium\Foundation\View\View)[5]
private 'arrTemplatesFolder' => null
private 'strMinifiedFolder' => string 'string und so2' (length=14)
private 'blnMinifyTemplates' => boolean true
Kommentar