tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
3789
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    dzab dzab ist offline Grünschnabel
    Registriert seit
    Mar 2004
    Beiträge
    3
    Halli Hallo,
    ich arbeite mich gerade in PHP ein und habe eine Frage zur Verwendung von Klassen, bzw. deren Objekte.
    Meine Testklasse sieht wie folgt aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    class Produktkat {
        var $kat = "";
        var $bez = "";
        function Produktkat($a,$b)
        {
            $this->kat = $a;
            $this->bez = $b;
        }
        
        function getKat()
        {
            return $this->kat;
        }
        function getBez()
        {
            return $this->bez;
        }   
    }

    in einer Schleife, lege ich mehrere Objekte an und speichere Sie in einem Array.
    So weit so gut, die Objekte werden im Array gespeichert (zumindestens ergibt die Funktion count() die erwartete Anzahl an Elementen.

    An einer späteren Stelle will ich das Array auslesen und die Werte aus dem Objekt ausgeben:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    echo("Elemente in Kategorien: ".count($GLOBALS["kategorien"]) );
    for($i=0; $i<count($kategorien); ++$i)
    {
        
        $eineKat = settype($GLOBALS["kategorien"][$i],"Produktkat");
        
        echo($eineKat->getKat());
        echo(" : ");
        echo($eineKat->getBez());
        echo("<br>");
    }

    Dann bekomme ich die Fehlermeldung:
    Call to a member function on a non-object

    Muss ich die einzelnen Elemente beim auslesen casten?
    Wenn ja, wie geht das?

    Wenn ich aus Spass per echo($eineKat) ausgebe, bekomme ich
    Object angezeigt....

    viele Grüsse
    Dirk
     

  2. #2
    saila saila ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Siegburg
    Beiträge
    742
    dein konstrukt ist im zweiten teil falsch. du verweist auf eine klasse über eine klasse die es nicht gibt.

    Beispiel:
    echo($eineKat->getKat());

    hier noch einige Infos zu Klassen und Objekten.

    http://www.dclp-faq.de/q/q-klassen-wie.html
     

  3. #3
    dzab dzab ist offline Grünschnabel
    Registriert seit
    Mar 2004
    Beiträge
    3
    Hallo,
    meinst Du mit Konstrukt das hier:
    settype($GLOBALS["kategorien"][$i],"Produktkat");
    ?

    Das habe ich nur in meiner Verzweiflung mal ausprobiert.
    Ich hab das mit den Klassen zuhause noch mal ausprobiert, und da hat es funktioniert....
    Das andere Skript war aber auch einiges umfangreicher, mehrere geschachtelte Abfragen. Hab bestimmt an irgendeiner anderen Stelle im Code einen Fehler.....Block schon geschlossen, oder so was....
    Trotzdem dankefür die Antwort.

    Hier mal der Funktionierende Code (für die, die es interessiert).

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    <?php
    class test
    {
        var $test;
        var $test2;
        
        function test($a, $b)
        {
            $this->test     = $a;
            $this->test2    = $b;
        }
        
        function getTest()
        {
            return $this->test;
        }
        function getTest2()
        {
            return $this->test2;
        }
    }
    ?>
     
    <html>
    <head><title></title></head>
    <body>
    <?php
        $testklasse = new test("hallo","dirk");
        $testklasse2    = new test("hallo","andy"); 
        
        $array      = array();
        $array[0]   = $testklasse;
        $array[1]   = $testklasse2;
        
        for($i=0;$i<count($array);++$i)
        {
            $tempklasse = $array[$i];
            echo($tempklasse->getTest() );
            echo(" ".$tempklasse->getTest2() );
            echo("<br>");
        }
    ?>
    </body>
    </html>
     

  4. #4
    saila saila ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Siegburg
    Beiträge
    742
    ja siehste. das meinte ich. in deinem ****enden code nimmst du ja auch nun bezug auf ein vorhandenes array!
     

  5. #5
    dzab dzab ist offline Grünschnabel
    Registriert seit
    Mar 2004
    Beiträge
    3
    $GLOBALS["kategorien"]

    gab es auch, ist halt ein global definiertes array, der zugriff darauf ging ja auch.
    (z. B. Die Anweisung:
    echo("Elemente in Kategorien: ".count($GLOBALS["kategorien"]) );

    lieferte die korrekte Anzahl.

    Nur die Zuordnung der enthaltenen Elemente und der Klasse ging nicht.

    Aber jetzt gehts ja
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 29.08.08, 18:08
  2. Antworten: 2
    Letzter Beitrag: 07.12.07, 11:23
  3. Antworten: 1
    Letzter Beitrag: 11.12.06, 22:57
  4. C++ allg. Array als (pvt) Objekt einer Klasse?
    Von Tintenfaß im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 19.09.06, 15:00
  5. JTextfield: Inhalt abspeichern und später wieder laden
    Von DarkJedi im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 5
    Letzter Beitrag: 04.05.05, 20:39