Klassen-Instanz an Funktion in Klassen-Funktion weitergeben

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

  • Klassen-Instanz an Funktion in Klassen-Funktion weitergeben

    Hallo,

    ich habe eine klasse "core" und eine Unterklasse "category" der ich "core" vererbt habe!

    In der Klasse "category", kann ich ja auch mit $this-> eine Funktion aus der Core aufrufen!

    Ich habe aber in einer Funktion der Klasse "category" ein Funktion hinzugefügt! also:
    PHP-Code:
    class category extends core
    ...
    public function 
    Import()
    {
        function 
    Rekursiv()
        {
        ...
        
    // Hier will ich aber auch die Funktionen der Klassen verwenden.
        // Geht aber nicht! $this, gibts hier nicht und global lässt sich auch nicht verwenden!
        
    }

    ich hab auch schon versucht $this als Variable der Funktion zu übergeben, aber das verabschiedet sich mein Apache!

    Hat jemand ein Lösung?

    Danke
    Zuletzt geändert von ; 17.02.2008, 10:53.

  • #2
    eine funktion innerhalb einer methode, wozu soll das gut sein

    warum definierst du die funktion nicht als separate methode innerhalb der klasse?

    Kommentar


    • #3
      die funktion in der methode, deshalb weil ich der methode daten rekursiv durchlaufen muss.

      ja, könnte ich in der Klasse selber als Methode definieren. Finde aber das ist ein unsaubere sache, weil eine Funktion soll bei mir eine aufgabe erledigen und nicht 2 funktionen in anspruch nehmen. ist halt mein stil zu code ;O)

      Kommentar


      • #4
        hab erstmal die funktion als methode ausgelagert,aber irgendwie ist es nicht möglich klassen-methoden rekursiv aufzurufen? wieso das?

        hier mal mein code:
        PHP-Code:
            protected function category_addSQLChild($arrImport,$intParentCid)
            {
                for (
        $a=0$a<count($arrImport); $a++)
                {
                    
        $strSQLCmd "INSERT INTO category (parent_cid,anet_cid,anet_parent_cid,name) VALUES
        ('"
        .$intParentCid."','".$arrImport[$a][0]."','".$arrImport[$a][1]."','".$arrImport[$a][2]."')";
                    
        $this->mysql_query($strSQLCmd);
                    if (
        count($arrImport[$a][4]))
                    {
                        
        $this->category_addSQLChild($arrImport,$this->mysql_insert_id());
                    }
                }
            }

            public function 
        category_import()
            {
                
        $strImportFile '../config/category.csv';
                
        // Prüfen ob Import-Datei vorhanden ist
                
        if (!file_exists($strImportFile))
                {
                    
        $this->category_addError('Import-Datei wurde nicht gefunden');
                    return 
        0;
                }
                
        // Import-Datei einlesen
                
        if (!$arrImport file($strImportFile))
                {
                    
        $this->category_addError('Import-Datei konnte nicht geöffnet');
                    return 
        0;
                }
                
        // Import in Array zerlegen
                
        for ($a=0$a<count($arrImport); $a++)
                {
                    
        $arrImport[$a] = explode(';',$arrImport[$a]);
                }
                
        // Import-Array rekursiv konvertieren
                
        function addChilds($intCid,$arrImport)
                {
                    
        $arrReturn = array();
                    
        $intReturn 0;
                    for (
        $a=0$a<count($arrImport); $a++)
                    {
                        if (
        $arrImport[$a][1] == $intCid)
                        {
                            
        $arrReturn[$intReturn] = $arrImport[$a];
                            
        $arrReturn[$intReturn][4] = addChilds($arrImport[$a][0],$arrImport);
                            
        $intReturn++;
                        }
                    }
                    return 
        $arrReturn;
                }

                for (
        $a=0$a<count($arrImport); $a++)
                {
                    if (
        $arrImport[$a][1] == 0)
                    {
                        
        $arrImport[$a][4] = addChilds($arrImport[$a][0],$arrImport);
                    }
                }

                
        // Jetzt rekursiv speichern
                
        $this->category_addSQLChild($arrImport,0);

                echo 
        '<pre>';
                
        print_r($arrImport);
                return 
        1;
            } 

        Kommentar


        • #5
          aber irgendwie ist es nicht möglich
          Dass heißt?
          Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

          Kommentar


          • #6
            weil sich dann mein apache aufhängt. so bald ich die instanz immer als variable übergebe an die rekursive funktion übergebe...

            wieß jemand, wie das richtig umzusetzen ist?

            Kommentar


            • #7
              geht das überhaupt? eine funktion innerhalb einer methode? warum legst du die wichtigen variablen nicht als eigenschaften fest und baust dir eine eigenen methode für die rekursion? irgendwie verstehe ich die logik nicht so ganz.

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                naja egal! ja funktion in klassen-methode geht. habs jetzt. hat ein dicken bug in der rekursion, und darum hat sich mein apache verabschiedet.

                danke!

                Kommentar


                • #9
                  Eine Funktion in einer Methode ist allerdings eine einfache Funktion und hat mit der Klasse rein gar nichts zu tun. Es ist so, als ob die Funktion außerhalb der Klasse definiert wurde!

                  Kommentar


                  • #10
                    Original geschrieben von PHP-Desaster
                    Es ist so, als ob die Funktion außerhalb der Klasse definiert wurde!
                    was schrecklich ist. man kann die methode nämlich nicht öfters aufrufen, sonst kommt es zu einem fatal error wegen redefinition der funktion.
                    und sie ist entgegen dem logischen sinn außerhalb der klasse sichtbar..
                    also ich würde ja eine private methode nehmen.
                    blllubb

                    Kommentar

                    Lädt...
                    X