Dynamische Bindung mit PHP4

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

  • Dynamische Bindung mit PHP4

    Hallo,

    also bei google habe ich nichts gefunden, was mir weiterhilft. Ich möchte unter PHP4 objektorientiert schreiben und brauche nun auch dynamische Bindung.

    Kann man das irgendwie in PHP4 umsetzen?

    Zuerst sind mir variable Variablen eingefallen, aber das lass ich doch lieber. Ist ja auch nicht wirklich dynamische Bindung. Aber ich weiß ja auch nicht, ob das überhaupt geht.

    Kann mir jemand helfen bitte?
    Rettet die Wälder - esst mehr Biber

  • #2
    klärst du mich auf, was "dynamische bindung" bedeutet?

    Kommentar


    • #3
      also besser als hier könnt ichs jetzt auch nicht beschreiben:
      http://de.wikipedia.org/wiki/Dynamische_Bindung

      Man spricht von dynamischer Bindung, wenn ein Methodenaufruf zur Laufzeit anhand des tatsächlichen (dynamischen) Typs eines Objektes aufgelöst wird.
      Rettet die Wälder - esst mehr Biber

      Kommentar


      • #4
        aha! verstehe ich das beispiel in wikipedia richtig: es werden stets die methoden der unterklassen aufgerufen, sodass die ausgabe aus ganz vielen geparden und elefanten besteht (und kein mal wir "säugetier" ausgegeben)?

        Kommentar


        • #5
          dynamische Bindung
          *schuß ins Blaue*
          Das dürfte unter PHP der unabänderliche Standard sein
          Wir werden alle sterben

          Kommentar


          • #6
            Original geschrieben von penizillin
            sodass die ausgabe aus ganz vielen geparden und elefanten besteht (und kein mal wir "säugetier" ausgegeben)?
            Ja, so schaut das für mich auch aus - auch wenn ich die Zeile
            Code:
            Saeugetier[] saeuger = new Saeugetier[4];
            nicht so ganz verstehe.

            Aber da alle Elemente von saeuger anschließend entweder mit einem neuen Elefanten oder einem neuen Geparden überschrieben werden, verstehe ich auch nicht ganz, was es mit der "dynamischen Bindung" auf sich haben soll - das ist doch dann ganz normale Überlagerung von Methoden in vererbten Klassen, oder ...?


            @Combie: Ja, so verstehe ich das auch.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              hm.. da wird ja ein array für 4 elemente vom typ säugetier angelegt..
              aber du hast recht, hätte nicht gedacht, dass es für dieses verhalten einen besonderen namen gibt. in php4 ist das auch ganz normal:
              s. beispiel 1 unter http://de.php.net/manual/en/keyword.parent.php

              Kommentar


              • #8
                Dynamische Bindung daher, da du in C/C++ bei der Erstellung eines Arrays dessen Größe und dessen Inhalt angeben musst. Den Inhalt kennst du aber noch nicht, da es ja wahlweise ein Elefant oder ein Gepard ist. Daher wird das Array mit Saeugetier initialisiert, da beide davon ableiten sind sie dann ein gültiger Inhalt.
                TBT

                Die zwei wichtigsten Regeln für eine berufliche Karriere:
                1. Verrate niemals alles was du weißt!


                PHP 2 AllPatrizier II Browsergame

                Kommentar


                • #9
                  da kann man deetee beruhigen - da php fast vollständig untypisiert ist, ist es total egal, was drin ist.
                  PHP-Code:
                  $arr = array(1'string', array()); 

                  Kommentar


                  • #10
                    Also ich hab jetzt eine Möglichkeit entdeckt, in einem Buch von MuT. "Die praktische Referenz PHP5"

                    Allerdings ist in PHP5 die Schreibweise etwas einfacher, ich habs PHP4 kompatibel gemacht und es geht:

                    PHP-Code:
                    require_once './MySQL.php';
                    require_once 
                    './Postgre.php';

                    function 
                    db($obj)
                    {
                      switch(
                    $obj)
                      {
                        case 
                    'MySQL':
                          return new 
                    MySQL();
                        break;
                        case 
                    'Postgre':
                          return new 
                    Postgre();
                        break;
                        default:
                          return 
                    0;
                      }
                    }

                    $obj = &db('MySQL');

                    $obj->getName(); 
                    In den beiden Klassen gibt es jeweils eine gleichnamige Methode getName().


                    Das Beispiel
                    http://de.php.net/manual/en/keyword.parent.php

                    trifft es nicht ganz, was mit dynamischer Bindung gemeint ist. Dynamische Bindung ist nicht an Vererbung gebunden.

                    Edit:
                    Diese switch Lösung hier ist auch nicht das gelbe vom Ei, aber es kommt der dynamischen Bindung recht nahe. So hat man es auch in C++ ganz früher gemacht.
                    Zuletzt geändert von deetee; 14.09.2006, 21:05.
                    Rettet die Wälder - esst mehr Biber

                    Kommentar


                    • #11
                      Achso.. also doch das "Factory Design Pattern"
                      (zumindest in Nachbildung)
                      Wir werden alle sterben

                      Kommentar


                      • #12
                        @combie
                        Ja genau. Nur ist das in PHP nicht ganz so gut umzusetzen.
                        Rettet die Wälder - esst mehr Biber

                        Kommentar


                        • #13
                          @deetee: wieso so umständlich

                          PHP-Code:
                          function newObj$typ ) {
                            return 
                          class_exists$typ ) ? new $typ() : 0;

                          TBT

                          Die zwei wichtigsten Regeln für eine berufliche Karriere:
                          1. Verrate niemals alles was du weißt!


                          PHP 2 AllPatrizier II Browsergame

                          Kommentar


                          • #14
                            Vielen Dank, TBT. Das ist das selbe in optimierter Form. Fein.

                            Und umständlich...ich bin froh, dass ich überhaupt noch drauf gestoßen bin.
                            Rettet die Wälder - esst mehr Biber

                            Kommentar


                            • #15
                              Ich habe jetzt über wikipedia einen Link entdeckt, der die Fabrikmethode in PHP erklärt. Ich bzw. wir waren sehr nah dran schon, jetzt hab ichs endlich wie ichs brauche...

                              Das Programm ansich
                              PHP-Code:
                              require_once './classes/DB.php';
                              require_once 
                              './classes/MYSQL.php';
                              require_once 
                              './classes/POSTGRESQL.php';

                              $oDB = new DB('MYSQL');

                              $oDB $oDB->getObject();

                              $oDB->getDB(); 
                              Klasse DB mit der factory method umgesetzt. Im Konstruktor wird das jeweilig gewünschte konkrete Objekt erzeugt und getObject() gibt die Referenz auf das Objekt zurück.
                              PHP-Code:
                              class DB
                              {
                                
                              // data elements
                                /**
                                * Type of database
                                * Example:
                                *
                                * @var object Database type.
                                */
                                
                              var $oDB;
                              // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                                /**
                                * standard constructor
                                */
                                
                              function DB($type)
                                {
                                  
                              $this->oDB = ( class_exists($type) ) ? new $type() : NULL;
                                }
                                
                                function & 
                              getObject()
                                {
                                  return 
                              $this->oDB;
                                }
                              // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

                              und hier die 2 DB Klassen MYSQL und POSTGRESQL mit der gleichnamigen Methode getDB().
                              PHP-Code:
                              class MYSQL
                              {
                                function 
                              getDB()
                                {
                                  echo 
                              'MYSQL';
                                }

                              PHP-Code:
                              class POSTGRESQL
                              {
                                function 
                              getDB()
                                {
                                  echo 
                              'POSTGRESQL';
                                }


                              Ok, dynamische Bindung ist das jetzt doch nicht. Sorry.
                              Zuletzt geändert von deetee; 15.09.2006, 00:41.
                              Rettet die Wälder - esst mehr Biber

                              Kommentar

                              Lädt...
                              X