Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem mit Übergabe einer Klasse in PHP4

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Problem mit Übergabe einer Klasse in PHP4

    Hallo erstmal
    Also ich habe folgendes Problem.
    Ich habe die Klasse "db" und die Klasse "Template" // Ich denke die namen sind selbsterklärend

    Nun mach ich mir ne neue Instanz der Klasse "db"
    $dbcon = new db([Args...]);

    da meine Templates in einer MySQL Tabelle liegen, muss ich innerhalb der Templateklasse die Instanz der "db" Klasse zur Verfügung haben.
    Diese übergebe ich als Konstruktor-Argument. So in etwa:
    $seite = new template("Templatename", $dbcon);

    Nun übergibt PHP der Klasse Template ja eine Kopie der Instanz von "db", was ich will ist aber keine Kopie, sondern daseine Referenz auf dbcon übergeben wird.

    wenn ich es wie folgt mache löst sich das Problem nicht, es wird nachwievor eine Kopie Übergeben:
    $seite = new template("Templatename", &$dbcon);


    Wie kann ich das Problem lösen?

    Danke im Vorraus
    benny

  • #2
    Also ich weiß, dass man andersrum Daten verändern kann:

    PHP-Code:
    function test ($var1, &$var2)
    {
      
    $var2 $var1;
    }

    $var1 'hallo';
    $var2 'welt';

    test ($var1$var2);

    echo 
    $var2// -> 'hallo' 
    Also quasi das & nicht in den Funktionsaufruf, sondern in der Funktionsdeklaration. Hast du das eventuell schonmal ausprobiert?

    Kommentar


    • #3
      Hilft mir jetzt aber net weiter was mein Problem mit Klassen angeht :/

      Kommentar


      • #4
        Zitat von b3nJ4M1n
        Hilft mir jetzt aber net weiter was mein Problem mit Klassen angeht :/
        Hast du es denn ausprobiert? Also nicht so:

        PHP-Code:
        $db = new db ();
        $tmpl = new template (&$db); 
        sondern:

        PHP-Code:
        $db = new db ();
        $tmpl = new template ($db); 
        und in der Klasse:

        PHP-Code:
        class template
        {
          
        // [...]

          
        function template (&$db)
          {
            
        // [...]
          
        }

        Kommentar


        • #5
          Verweise (aka Referenzen) als Parameter übergeben:
          http://de2.php.net/manual/de/functions.arguments.php

          Referenzen in PHP:
          http://de2.php.net/references


          Der Beitrag wurde verschoben, wegen...
          ... Postings im falschen Forum.

          Bemerkung:
          Die gestellte Frage entspricht nicht dem Wissensstand eines Profis. Dazu: http://www.phpfriend.de/forum/viewtopic.php?t=21431

          moved to PHP - Fortgeschrittene

          PS: Du übergibst Objekte und keine Klassen.
          mod = master of disaster

          Kommentar


          • #6
            Re: Problem mit Übergabe einer Klasse in PHP4

            Zitat von b3nJ4M1n
            Also ich habe folgendes Problem.
            Ich habe die Klasse "db" und die Klasse "Template" // Ich denke die namen sind selbsterklärend
            Nicht wirklich, weil Namen sind ja wie "Schall und Rauch".

            da meine Templates in einer MySQL Tabelle liegen, muss ich innerhalb der Templateklasse die Instanz der "db" Klasse zur Verfügung haben.
            Diese übergebe ich als Konstruktor-Argument. So in etwa:
            $seite = new template("Templatename", $dbcon);
            PHP4:
            Code:
            $seite = & new template("Templatename", &$dbcon);

            Kommentar


            • #7
              Also ich habe jetzt alle hier geposteten Vorschläge mal ausprobiert, und ´musste leider feststellen, das keiner Funktioniert

              Kommentar


              • #8
                zeig und, was du 'ausprobiert' hast
                [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

                Kommentar


                • #9
                  Also so, wie ich es geschrieben habe mit dem & in der Funktionsdeklaration hat es bei mir funktioniert ^^. Ich kann auf das selbe Objekt zugreifen. Habe selber ausprobiert, ob es mit meiner Datenbank-Klasse klappt und es läuft einwandfrei.

                  Kommentar


                  • #10
                    Also ich hab jetzt einfach mal alles durchprobiert xD
                    Folgendes Beispiel funktioniert (es wird 2 mal "GRÜN" augegeben):

                    Trotzdem nochma danke an alle die mir geholfen haben

                    PHP-Code:
                    <?php
                    class Auto {
                        var 
                    $Farbe;

                        function 
                    Auto($Farbe) {
                            
                    $this->Farbe $Farbe;
                        }
                    }

                    class 
                    Mensch {
                        var 
                    $Hautfarbe;
                        var 
                    $_Auto;
                        
                        function 
                    Mensch($Auto) {
                            
                    $this->_Auto = &$Auto;
                        }
                    }

                    $Fahrzeug = new Auto("ROT");
                    $Markus = new Mensch(&$Fahrzeug);
                    $Markus->_Auto->Farbe "GRÜN";

                    echo 
                    $Fahrzeug->Farbe;
                    echo 
                    $Markus->_Auto->Farbe;
                    ?>
                    [/code]

                    Kommentar


                    • #11
                      wichtig ist, das du in der Funktion die Variable auch als Refernz übernimmst

                      PHP-Code:
                      <?php
                      class Auto {
                         var 
                      $Farbe;

                         function 
                      Auto($Farbe) {
                            
                      $this->Farbe $Farbe;
                         }
                      }

                      class 
                      Mensch {
                         var 
                      $Hautfarbe;
                         var 
                      $_Auto;
                         
                         function 
                      Mensch(&$Auto) {
                            
                      $this->_Auto = &$Auto;
                         }
                      }

                      $Fahrzeug = new Auto("ROT");
                      $Markus = new Mensch(&$Fahrzeug);
                      $Markus->_Auto->Farbe "GRÜN";

                      echo 
                      $Fahrzeug->Farbe;
                      echo 
                      $Markus->_Auto->Farbe;
                      ?>

                      Kommentar

                      Lädt...
                      X