anzeige

mehrere klassen ineinander verwenden


Seite: 1
Autor Beitrag
Abgemeldet
27.07.10 - 12:18:46 Uhr

hallo,
ich baue gerade eine klasse, die ein paar mysql funktionen nutzen sollte. dazu habe ich schon eine mysql klasse erstellt. die beiden klassen sehen ungefähr folgendermaßen aus:

seite.php:
  1. class seite {  
  2.       
  3.     public $db;  
  4.       
  5.     private $server = "localhost";  
  6.   private $name = "root";  
  7.   private $pw = "";  
  8.     private $database = "adventure";  
  9.       
  10.     public function __construct() {  
  11.         include "db.php";  
  12.         $db = new db($this->server,$this->name,$this->pw,$this->database);  
  13.     }  
  14. ...  
  15.  


db.php:
  1. class db {  
  2.       
  3.     private $server;  
  4.   private $name;  
  5.   private $pw;  
  6.     private $db;  
  7.       
  8.     public function __construct($server,$name,$pw,$db) {  
  9.         $this->server = $server;  
  10.         $this->name = $name;  
  11.         $this->pw = $pw;  
  12.         $this->db = $db;  
  13.     }  
  14. ...  
  15.  


jetzt habe ich in der seiten klasse eine login funktion. in der will ich nun auf die $db variable zugreifen. dies funktioniert aber nicht, mir stehen keine funktionen der db klasse zur verfügung.
wenn ich jedoch konstruktor der seiten klasse was mit der $db variablen machen will klappts. schränke ich iwo die sichtbarkeit ein?

in java ist das iwie einfachen da bräuchte man nur zbs: public MysqlKlasse db;

was mache ich falsch? programmiere das erste mal mit php objektorientiert.

grüße
SammysHP
27.07.10 - 12:30:45 Uhr

Stopp, stopp, stopp. Du hast da einige Fehler gemacht.

1. Klassen und objektorientierte Programmierung haben die Eigenschaft, dass jede Klasse für sich entwickelt werden kann. Du solltest dir vielleicht mal das MVC- bzw. HMVC-Pattern anschauen.

2. Klassen verschachtelt man nie! (Außer, man überschreibt irgendwas, dann ist es aber auch keine richtige Klasse mehr.) Zudem ist es sinnvoll, jede Klasse in eine Datei zu packen.

3. Dein Start-Script sorgt dafür, dass alle Klassen außerhalb der Klassendeklaration zur Verfügung stehen. Idealerweise nutzt man dafür einen Autoloader, das erspart die require_once() (require, da wir die Klasse ja unbedingt brauchen, php soll daher 'nen Fehler ausgeben; once, da wir die ja nur einmal brauchen: außerhalb).

4. Noch 'n Vorschlag: Vernünftige Bezeichner. "db" = was? MySQL? Oracle? PostgreSQL? Deine DB-Klasse sollte also z.B. MySql heißen.

Zitat:
was mache ich falsch? programmiere das erste mal mit php objektorientiert.
Merkt man, so wirklich objektorientiert ist es nicht.

Zitat:
in java ist das iwie einfachen da bräuchte man nur zbs: public MysqlKlasse db;
Öhm, korrekt ist das aber auch nicht. So ein Feld hat einfach nicht public zu sein.

Für die DB könntest du dir eventuell auch das Singleton- oder Factory-Pattern anschauen. Damit kannst du unnötig viele Verbindungen zur DB vermeiden, indem du immer die gleiche Instanz / Instanzen mit der gleichen Verbindung nutzt. Zudem könntest du damit Querys optimieren.

_________________
www.sammyshp.de
Seite: 1

- Obige Beiträge stellen keine Äußerung oder Meinung von Pytal oder dessen Betreiber dar -