Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Unterschiedliche Objekte mit gleicher Objekt-ID

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Unterschiedliche Objekte mit gleicher Objekt-ID

    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.

    PHP-Code:
    $objInversionContainer->register('View', function()
    {
        return (new 
    View('string und so'));
    });

    $objInversionContainer->register('View2', function()
    {
        return (new 
    View('string und so2'));
    }); 
    Und so werden sie gespeichert und wieder aufgelöst.

    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]));
        }

    Wenn ich allerdings folgendes mache:

    PHP-Code:
    var_dump($objInversionContainer->resolve('View'));
    var_dump($objInversionContainer->resolve('View2')); 
    Kommt als Ergebnis:

    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 
    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.

  • #2
    Wie kann es sein das die 2 Objekte unterschiedlich sind obwohl die ID gleich ist?
    Das „...View)[5]“ sind keine Objekt-Ids sondern nur fortlaufende ObjektNummern (von momentan existierenden Objekten im Speicher). Da Du keine Referenz auf die Objekte speicherst wird das Objekt innerhalb von var_dump() erzeugt und dann sofort wieder zerstört. Deshalb bekommt das nächste Objekt wieder dieselbe Nummer.

    Probiere mal Folgendes aus:

    PHP-Code:
    $view_1 objInversionContainer->resolve('View');
    $view_2 objInversionContainer->resolve('View2');
    var_dump($view_1);
    var_dump($view_2); 
    vg
    jack
    -

    Kommentar


    • #3
      Jetzt versteh ich das. Danke

      Kommentar

      Lädt...
      X