[OOP] Objekte in anderen Klassen verwenden

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

  • [OOP] Objekte in anderen Klassen verwenden

    Moin!

    ich bin noch recht am Anfang was OOP angeht und so arbeite ich derzeit an meiner ersten größeren Anwendung.

    Jetzt ergeben sich ein paar Fragen was den generellen Aufbau der Klassen/Methoden angeht.

    Konkret:
    In verschiedenen Methoden benötige ich meine Instanz eines zuvor erzeugten DB Objekts um die Querys auszuführen. Wie kann ich es elegant ausführen dass die Methode auf mein DB Objekt zugreifen kann? Muss ich es jedes Mal als Parameter an die Methode übergeben?

    Grüße
    stun

  • #2
    entweder du erweiterst die classe um deine Ursprungsklasse

    PHP-Code:

    class example extends main{



    dann hast du innerhalb der classe example zugriff auf alle methoden der mainclass

    oder du rufts inhalb einer function

    PHP-Code:

    funcxtion xyz
    ()
    {

      
    $example=new main;

    Zuletzt geändert von newphp; 16.10.2006, 11:59.

    Kommentar


    • #3
      hmmm...

      ich finde es nicht sonderlich logisch eine klasse (z.b. User) von der Klasse Datenbank erben zu lassen, denkst du nicht?

      zum zweiten vorschlag: dann habe ich ja pro methodenaufruf eine neue instanz. das ist ja nicht sonderlich empfehlenswert oder hab ich da was falsch verstanden?

      Kommentar


      • #4
        Original geschrieben von newphp
        entweder du erweiterst die classe um deine Ursprungsklasse
        Gerade im hier vorliegenden Fall wäre das extrem unsinnig.

        Alle Klassen, die irgendwelche Inhalte aus der Datenbank lesen sollen, von der Datenbanklasse erben lassen?
        Nein, das wäre Pervertierung von OO.


        Singleton würde sich hier viel eher anbieten.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          ok habs mir grade mal angeschaut, den Singleton war mir neu aber funtoniert das auch unter php 4?

          Kommentar


          • #6
            Nein, weil php keine statischen member kennt.

            Man kann es mittels $_GLOBALS emulieren, ist aber nicht sonderlich
            schön. Geht aber in diesem fall nicht viel besser.
            Ich würde alle Klassen die mit der db zu tun haben von einer basisklasse
            ableiten deren construktor dann einen protected member instanziert auf den
            die abgeleiteten klassen zugreifen können. Dieser member wird mittels der
            singleton-methode der dbklasse instanziert.


            PHP5
            PHP-Code:
            class BaseModel{
                    protected 
            $db_;
                    public function 
            __construct(){
                         
            $this->db_ DB::get_instance();
                         
            //if !$this->db_ throw new Exception (oder ähnliches)
                    
            }    
                   
            //hier könnten noch methoden für basis-validierung der daten folgen  
            }

            class 
            AccountModel extends BaseModel{
                       public function 
            __construct(){
                              
            parent::__construct();
                       }

            In php4 geht das ganz eben nicht mittels __construct sonder durch
            direkten aufruf der methode BaseModel.
            Exceptions fallen dann auch weg. Btw. würde ich an deiner stelle
            dann PEAR:B nehmen, da ist das alles schon für dich erledigt.

            greets
            (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

            Kommentar


            • #7
              Hm okay so ähnlich wollte ich es schon zu Beginn machen:

              in etwa so (php4!!!):
              PHP-Code:

              $db 
              = new db();
              $t = new Smarty();

              class 
              App {

                function 
              App(&$t, &$db) {
                   
              $this->= &$t// template
                   
              $this->db = &$db// db
                
              }

              }

              class 
              User extends App {
               ...

              somit kann ich in user ja auch auf $db zugreifen, richtig?
              ich habe nur vermutet dass es eben nicht konsequent/elegant oop ist. oder heiligt der zweck die mittel?

              leider habe ich nur php4 zur verfügung. kann mir gut vorstellen dass man in 5 bessere möglichkeiten hat oder?

              Kommentar

              Lädt...
              X