hans: Klassen

Servus,

ich habe hier eine User Klasse:

class user
{
 private $db;
 public function __construct($db)
 {
  $this->db= clone $db;
 }
 public function foo()
 {
  echo "bar";
 }
}

Dieser Klasse wird eine Datenbankklasse übergeben.

So nun bin ich in einer anderen PHP-Datei:

include("./user.class.php");
user::foo();

Würde jetzt aber die Funktion foo() die Datenbankklasse in der Klasse user
benutzen wollen geht das nicht, da ich sie der Klasse nicht übergeben habe.
So nun meine Frage: Wie übergebe ich dieser Klasse user noch die Datenbanklasse, die z.B. $db heißt?

Danke im Vorraus
Hans

  1. Servus,

    ich habe hier eine User Klasse:

    class user
    {
    private $db;
    public function __construct($db)
    {
      $this->db= clone $db;
    }
    public function foo()
    {
      echo "bar";
    }
    }

    Dieser Klasse wird eine Datenbankklasse übergeben.

    So nun bin ich in einer anderen PHP-Datei:

    include("./user.class.php");
    user::foo();

    Würde jetzt aber die Funktion foo() die Datenbankklasse in der Klasse user
    benutzen wollen geht das nicht, da ich sie der Klasse nicht übergeben habe.
    So nun meine Frage: Wie übergebe ich dieser Klasse user noch die Datenbanklasse, die z.B. $db heißt?

    Danke im Vorraus
    Hans

    Soweit ich das verstanden hab, musste die Instanz $db einfach in die Klasse laden.
    class user
    {
       public $db;
    }

    $dieser_user = new user();
    $dieser_user->db = $db;

    und schon kannste in der user Klasse mit $this->db auf die Instanz $db "zugreifen".

    HF & GL
    T-Rex

    1. Genau, da liegt mein Problem,
      geht es auch ohne Instanzbildung.

      Hopsel: was fehlt mir noch?

      Hans

      1. Hi hans!

        Genau, da liegt mein Problem,
        geht es auch ohne Instanzbildung.
        Hopsel: was fehlt mir noch?

        Du musst doch eine Instanz bilden. Ob von einer abgeleiteten Klasse oder direkt von der Klasse selbst, ist dabei egal.

        Wie schon gesagt: Meiner Meinung nach hast du ein anderes Problem. Wo merkst du, dass du auf $db nicht zugreifen kannst?

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. Hi hans!

          Wie schon gesagt: Meiner Meinung nach hast du ein anderes Problem. Wo merkst du, dass du auf $db nicht zugreifen kannst?

          Wahrscheinlich versuchst du in einer abgeleiteten Klasse darauf zuzugreifen. dafür müsstest du dieser Klasse aber Zugriff auf $db erlauben.
          Da wäre private aber der falsche Spezifizierer. Versuchs mal mit protected.

          MfG H☼psel

          --
          "It's amazing I won. I was running against peace, prosperity, and incumbency."
          George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
          Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
      2. Genau, da liegt mein Problem,
        geht es auch ohne Instanzbildung.

        Hopsel: was fehlt mir noch?

        Hans

        Ohne Instanzbildung?
        Dann wäre Vererbung das Stichwort!
        Hier ist eine ganz kurze Anleitung. http://www.devmag.net/webprog/php_oop_4.htm

        Gruß und so
        T-Rex

  2. Hi hans!

    Würde jetzt aber die Funktion foo() die Datenbankklasse in der Klasse user
    benutzen wollen geht das nicht, da ich sie der Klasse nicht übergeben habe.

    Das geschieht doch bei der Instanzbildung.

    So nun meine Frage: Wie übergebe ich dieser Klasse user noch die Datenbanklasse, die z.B. $db heißt?

    Bei der Instanzbildung.

    Du scheinst aber ein anderes Problem zu haben. Welches?

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  3. echo $begrüßung;

    ich habe hier eine User Klasse:
    Dieser Klasse wird eine Datenbankklasse übergeben.

    Vielleicht kommst du günstiger, wenn du die Sache andersrum angehst. Die Datenbankklasse könnte eine Instanz ihrer selbst per Singleton-Pattern (meist reicht ja eine Verbindung) oder per Factory-Pattern (wenns doch mehrere einzelne Instanzen sein sollen) an andere auf Anforderung rausgeben.

    echo "$verabschiedung $name";