Methoden Aufruf eines als Referenz in Klasse gespeichertes Objekt

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

  • Methoden Aufruf eines als Referenz in Klasse gespeichertes Objekt

    Hallo Community!

    Nachdem ich seit fast 2 STunden nun schon auf der Suche nach meinem Denk- bzw. Verständnisfehler bin, dachte ich mir, ich frag Euch einfach mal:

    Habe eine Klasse Warenkorb geschrieben. Ein WK wird erzeugt, wenn ein Besucher die Seite betritt. Nun legt er einen Artikel in diesen. Konsequent ist doch jetzt nach dem OOP Ansatz, dass ich eine weitere Klasse WarenkorbInhalt habe, wo die einzelnen Artikel darin als Objekte erzeugt werden => Auf Deutsch:

    Wenn der Besucher etwas in den WK legt, dann wird ein Objekt der Klasse WarenkorbInhalt instanziiert. Jetzt möchte ich natürlich diese einzelnen Artikel über den Warenkorb "verwalten" und z.B. in einer Funktion in der Klasse Warenkorb die als Objektreferenzen gespeicherten Objekte der Klasse WarenkorbInhalt ansprechen und ihnen einen Botschft schicken, wie z.B. showDetails.

    Genau das ist mein Problem! Ich habe da wohl was noch nicht verstanden, denn wenn ich versuche die Methode der anderen Klasse aus der KLasse Warenkorb aufzurufen kommt diese Fehlermeldung:

    Fatal error: Call to a member function on a non-object in
    Anbei mal mein erstellter Quelltext - vielleicht kann mir ja einer von Euch sagen, was ich grundsätzlich falsch mache und wo der Knackpunkt ist:

    PHP-Code:
    #Warenkorbklasse
    class warenkorb
    {
            
    # Variablen
            
    var $wkID$anzahlArtikel$wkPositionen = array();
            
            
    #neuen Warenkorb einrichten
            
    function set_newWK($sessionID)
            {
                    
    $this->wkID$sessionID;
                    
    $this->anzahlArtikel=0;
                    
            }
            
    #Anzeige Warenkorb Parameters
            
    function showWK_Parameters()
            {
                    echo 
    '<b>Anzahl der Artikel</b> im Warenkorb: '.$this->anzahlArtikel.'<br/><b>SessionID</b>:  '.$this->wkID.'<p/>Liste der Artikel darin:<p/>';
                    
    $a=0;
                    while(
    $a<$this->anzahlArtikel){
                            
    $this->wkPositionen[$a]-> show_Details();
                            
    $a++;
                    }
            }
            
    #Neuen Artikel in WK
            
    function setArtikel_WK($pID$Artikelname$ArtikelNummer$Hersteller$Gr$Farbe$UVP$Anz)
            {
                    
    $mc $pID.$Artikelname.$ArtikelNummer.$Gr.$Farbe.$Hersteller;
                    
    $a=0;
                    
    $is_objekt false;
                    while(
    $a<$this->anzahlArtikel){
                            
    $is_objekt$this->wkPositionen[$this->anzahlArtikel]->checkMatchcode($mc);
                            
    $a++;
                    }
    #ENDE WHILE
                    
    if($is_objekt==false){# Es muss eine Instanz der Klasse WarenkorbInhalt erzeugt werden
                            
    $this->wkPositionen[($this->anzahlArtikel+1)] = new warenkorbInhalt();
                            
    $this->wkPositionen[($this->anzahlArtikel+1)]->setWK_Artikel($pID$Artikelname$ArtikelNummer$Hersteller$Gr$Farbe$UVP$Anz$mc);
                            
                    }
                    
                    
    $this->anzahlArtikel count($this->wkPositionen);        
            }
            
    }

    #WarenkorbInhalt
    class warenkorbInhalt extends warenkorb
    {
            var 
    $pID$Artikelname$ArtikelNummer$Hersteller$Gr$Farbe$UVP$Anz;
            var 
    $pMatchCode;
            
            
    # Warenmatchcode prüfen...
            
    function &checkMatchcode($mc)
            {
                    if(
    $this->pMatchCode==$mc)
                            return 
    true;
            }
            
    # Artikeldaten setzten
            
    function setWK_Artikel($pID$Artikelname$ArtikelNummer$Hersteller$Gr$Farbe$UVP$Anz$pMatchCode)
            {
                    
    $this->pID=$pID;
                    
    $this->Artikelname=$Artikelname;
                    
    $this->ArtikelNummer=$ArtikelNummer;
                    
    $this->Hersteller=$Hersteller;
                    
    $this->Gr=$Gr;
                    
    $this->Farbe=$Farbe;
                    
    $this->UVP=$UVP;
                    
    $this->Anz=$Anz;
                    
    $this->pMatchCode=$pMatchCode;
            }
            
            
    #Anzeigen
            
    function show_Details()
            {
                    echo
    'Hier meldet sich das Objekt: '.$this->pMatchCode.'<p/>pID: '.$this->pID.'<br/>Artikelname: '.$this->Artikelname.';
            }
            

    Vielen Dank für Eure Hilfe!

  • #2
    Zeilenumbrüche in den Code, ansonsten liest ihn die Hälfte nicht mal...

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      var_dump() benutzen und mal debuggen
      Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
      var_dump(), print_r(), debug_backtrace und echo.
      Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
      Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
      Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

      Kommentar


      • #4
        Tausch das mal mit dem aus...


        PHP-Code:

        ...

                
        #Neuen Artikel in WK
                
        function setArtikel_WK($pID$Artikelname$ArtikelNummer$Hersteller$Gr$Farbe$UVP$Anz)
                {
                        
        $mc $pID.$Artikelname.$ArtikelNummer.$Gr.$Farbe.$Hersteller;
                        
        $a=0;
                        
        $is_objekt false;
                        while(
        $a<$this->anzahlArtikel){
                                
        $is_objekt$this->wkPositionen[$a]->checkMatchcode($mc);
                                
        $a++;
                        }
        #ENDE WHILE
                        
        if($is_objekt==false){# Es muss eine Instanz der Klasse WarenkorbInhalt erzeugt werden
                                
        $this->wkPositionen[$a] = new warenkorbInhalt();
                                
        $this->wkPositionen[$a]->setWK_Artikel($pID$Artikelname$ArtikelNummer,
        $Hersteller$Gr$Farbe
        $UVP$Anz$mc);
                                
                        }
                        
                        
        $this->anzahlArtikel count($this->wkPositionen);        
                }

        ... 

        hoffe ich konnte helfen

        Phil

        Kommentar

        Lädt...
        X