| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

03-08-2010, 16:00
|
|
PHP-Master07
Registrierter Benutzer
|
|
Registriert seit: Nov 2007
Ort: Austria (currently US)
Beiträge: 33
|
|
OOP: Objekt für alle Klassen zugänglich machen
Hallo!
Ich habe soeben ein neues Projekt starten. Alle MySQL-Abfragen werden mit Klassen gelöst. Die Sprachverwaltung/-auswahl sollte auch mit Klassen funktionieren. Ich habe jetzt folgende Struktur:
index.php:
PHP-Code:
<?php
include 'class.mysql.php';
include 'class.languages.php';
$db = new mysql();
$languages = new languages('de');
?>
class.mysql.php:
PHP-Code:
<?php
class mysql {
function mysql() {
$this->connect();
}
function connect() {
//Verbindung zur Datenbank erstellen
}
function query() {
//Abfragen zur Datenbank bearbeiten
}
}
?>
class.languages.php:
PHP-Code:
<?php
class languages {
function languages($lang) {
$this->set($lang);
}
function set($lang) {
//Sprache setzen
$db->query(/*query*/);
}
function test() {
$db->query(/*query*/);
}
}
?>
Die Sprachen sind alle in der Datenbank gespeichert. Gibt es eine Möglichkeit, $db global für ALLE Methoden in der Klasse zu setzen oder muss man bei jeder Methode immer 'global $db;' schreiben?
|

03-08-2010, 16:03
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Fang bloß nicht mit dem global-Scheiß an. Das ist Pfusch und bringt dich in des Teufels Küche. Also entweder mit extends arbeiten oder du legst eine Referenz an. Und bitte orientiere dich am PHP5-Standard. Di hast da noch den alten 4er-Müll.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

03-08-2010, 16:13
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Kropff
Also entweder mit extends arbeiten
|
Das wäre genauso Pfusch.
Dependency Injection wäre hier m.W. ein Stichwort.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

03-08-2010, 16:17
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Zitat:
Zitat von wahsaga
Das wäre genauso Pfusch.
Dependency Injection wäre hier m.W. ein Stichwort.
|
Herrgott, der fängt doch gerade erst an. Gib ihm erst mal Zeit für die Basics. Die Feinheiten kommen dann später.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

03-08-2010, 16:21
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Kropff
Herrgott, der fängt doch gerade erst an. Gib ihm erst mal Zeit für die Basics.
|
Sicher, sicher ... aber ich hatte deinen Hinweis auf extends so verstanden, dass du vorschlagen wolltest, alle Klassen von einer Datenbank-Klasse erben zu lassen(?) - und das wäre ein Holzweg, von dem man nachher nur mit hohem Aufwand wieder runter kommt.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

03-08-2010, 16:24
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Dann versuche ich es mal:
1. Lass den "globals" Quatsch!
2. Besser wäre es das DB Objekt per Setter- oder Konstruktorinjektion durch zu reichen.
3. Auch eine Registry könnte eine Lösung sein
4. Fange gar nicht erst mit Singletone an, um globale Variablen zu ersetzen
|

03-08-2010, 16:28
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von Kropff
Gib ihm erst mal Zeit für die Basics. Die Feinheiten kommen dann später.
|
Das verstehe ich jetzt nicht. Genau mit diesem Argument könnte man entweder auch die Benutzung von global rechtfertigen oder es ist völlig von global und der Vererbung von Datenbankschnittstellen abzuraten.
@PHP-Master07: Informier dich lieber über MVC und benutz gängige Datenbankabstraktionsklassen wie z. B. PDO. Im Script erzeugst du dann eine PDO-Instanz und übergibst sie den Fachklassen im Konstruktor.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

03-08-2010, 16:29
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Zitat:
Zitat von wahsaga
Sicher, sicher ... aber ich hatte deinen Hinweis auf extends so verstanden, dass du vorschlagen wolltest, alle Klassen von einer Datenbank-Klasse erben zu lassen(?) - und das wäre ein Holzweg, von dem man nachher nur mit hohem Aufwand wieder runter kommt.
|
Um Gottes Willen. So verrückt bin selbst ich nicht.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

03-08-2010, 16:31
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Zitat:
Zitat von AmicaNoctis
... könnte man entweder auch die Benutzung von global rechtfertigen
|
Das sind imho Basics.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

03-08-2010, 21:14
|
 |
fab-s
Registrierter Benutzer
|
|
Registriert seit: Aug 2010
Beiträge: 28
|
|
Ich glaube, ihr seid alle betriebsblind  Der Thread-Ersteller kennt offensichtlich noch nicht einmal Properties, denn das ist das was er der Beschreibung nach sucht.
@PHP-Master07: Vergiss erstmal Begriffe wie Dependency Injection usw. und fang damit an die Basics von Objektorientierung zu verstehen, da solltest du haufenweise Material im Netz finden.
PHP spezifisch:
PHP: Eigenschaften - Manual
Und lass dir nicht erzählen du müsstest für Objekte Referenzen anlegen!
|

04-08-2010, 10:59
|
|
eintrachtemil
Registrierter Benutzer
|
|
Registriert seit: May 2004
Beiträge: 223
|
|
So zum Beispiel auf die Schnelle:
index.php:
PHP-Code:
<?php
include 'class.mysql.php';
include 'class.languages.php';
$db = new mysql();
$languages = new languages($db, 'de');
?>
class.mysql.php:
PHP-Code:
<?php
class mysql {
public function __construct() {
$this->connect();
}
public function connect() {
//Verbindung zur Datenbank erstellen
}
public function query() {
//Abfragen zur Datenbank bearbeiten
}
}
?>
class.languages.php:
PHP-Code:
<?php
class languages {
protected $_lang;
protected $_db;
public function __construct($db, $lang) {
$this->setDb($db);
$this->setLang($lang);
$this->init();
}
public function setDb($db){
$this->_db = $db;
}
public function setLang($lang) {
$this->_lang = $lang;
}
public function init() {
$this->_db->query(/*query*/);
}
public function test() {
$this->_db->query(/*query*/);
}
}
?>
__________________
Simploo CMS - das einfache Webseiten-Bearbeitungsprogramm
|

09-08-2010, 21:17
|
|
PHP-Master07
Registrierter Benutzer
|
|
Registriert seit: Nov 2007
Ort: Austria (currently US)
Beiträge: 33
|
|
Danke für eure nützlichen Tipps.
@fab-s: Jetzt weiß ich endlich, was ich noch lernen muss. Danke.
@eintrachtemil: Danke für die anschaulichen Beispiele! Sie haben mir sehr geholfen.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|