[OOP] Missing Argument

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

  • [OOP] Missing Argument

    Hi Leute,

    folgendes:

    index.php

    PHP-Code:
    $mysql = new DB_MySQL("localhost""***""***""***");
    $mysql->connect(); 
    Funktioniert 1a


    Dann erstelle ich eine Instanz von Comment()
    PHP-Code:
    $comment = new Comment();
    $comment->getAll(); 
    In Comment.class.php


    PHP-Code:
    class Comment extends DB_MySQL {
    // ...
        
    $db = new DB_MySQL("localhost""***""***""***");
        
    $db->connect();
    // ...

    wirft den Fehler:

    Code:
    Warning: Missing argument 1 for DB_MySQL::__construct()...
    Warning: Missing argument 2 for DB_MySQL::__construct()...
    Warning: Missing argument 3 for DB_MySQL::__construct()...
    Warning: Missing argument 4 for DB_MySQL::__construct()...
    Wieso bekommt er die Argumente nicht - welchen Fehler mache ich?

    MfG bluma

  • #2
    Re: [OOP] Missing Argument

    Ist mir schleierhaft, warum du in einer Klasse, die von DB_MySQL erbt, nochmal ein new DB_MySQL() erstellen willst.


    Aber jede Klasse, die eine Datenbankverbindung brauchen könnte, von DB_MySQL erben zu lassen, ist sowieso der falsche Weg.
    Erstelle dir innerhalb der Klassen, die eine Datenbankverbindung benötigen eine Instanz von DB_MySQL, bzw. übergebe eine an das jeweilige Objekt.
    Wenn du PHP 5 nutzt, beschäftige dich mit dem Singleton Pattern.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Re: Re: [OOP] Missing Argument

      Original geschrieben von wahsaga
      Ist mir schleierhaft, warum du in einer Klasse, die von DB_MySQL erbt, nochmal ein new DB_MySQL() erstellen willst.


      Aber jede Klasse, die eine Datenbankverbindung brauchen könnte, von DB_MySQL erben zu lassen, ist sowieso der falsche Weg.
      Erstelle dir innerhalb der Klassen, die eine Datenbankverbindung benötigen eine Instanz von DB_MySQL, bzw. übergebe eine an das jeweilige Objekt.
      Wenn du PHP 5 nutzt, beschäftige dich mit dem Singleton Pattern.
      Dankeschön für den Tipp wahsaga,

      ich habe mich mit Singleton beschäftigt und das Pattern nun erfolgreich auf das Problem angewandt. Folgende obrige Zeilen lauten nun so (Für alle anderen, die ggf. dasselbe Problem haben sollten in geraumer Zukunft):

      DB_MySQL.class.php:
      PHP-Code:
      /**
       * private verhindert Instanzierung außerhalb der Klasse.
       * Sie kann nur einmalig (siehe: $instance) instanziert werden.
       * Jedes weiteres getInstance verweist auf die erstellte Instanz.
       */
      //...
      private static $instance NULL;

      private function 
      __construct($host$database$user$pass) {
          
      $this->host $host;
          
      $this->database $database;
          
      $this->user $user;
          
      $this->pass $pass;
      }
       
        
      public static function 
      getInstance() {
        if (
      self::$instance === NULL)
        {
            
      self::$instance = new DB_MySQL("host""database""***""***");
        }
        return 
      self::$instance;
      }
      // ... 
      index.php
      PHP-Code:
      // Erstmalige instanzierung von DB_MySQL
      $mysql DB_MySQL::getInstance();
      $mysql->connect(); 
      PHP-Code:
      // Instanz von Comment, welche die DB_MySQL-Klasse benötigt.
      $comment = new Comment(); 
      Comment.class.php
      PHP-Code:
      // Arbeite mit vorhandenem Objekt
      $db DB_MySQL::getInstance(); 
      MfG bluma
      Zuletzt geändert von bluma; 03.06.2006, 15:31.

      Kommentar


      • #4
        Hi,

        da du offensichtlich in der lage bist, zu bestimmten themen
        zu recherchieren und ggf. auf deine verhältnisse anzupassen
        und zu implementieren, erkundige dich doch bitte gleich nochmal
        nach RAII. (Das ist nicht ironisch gemeint, gibt leider wenige die
        das machen).

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

        Kommentar

        Lädt...
        X