OOP, so okey?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
angabe
arbeit
argument
code
datenbank
datum
falsche sachen
fehler
geschlecht
gut gehen
host
methode
muster
null
problem
setzen
standardwert
tip
verbindung
vorzeitigen ende
-
Hey,
Ich bin gerade dabei OOP zu lernen hier sind nun meinen ersten Beispiele, sind die so okey oder mach ich etwas falsch?
Bzw. könnt ihr mir noch einpaar Tipps geben?
Es soll Hauptsächlich darum gehen falsche Sachen sofort wieder zu vergessen, sodass ich später mich nicht wieder umgewöhnen muss.
test.php
<?php session_start (); $_SESSION['ID'] = 1; error_reporting(E_ALL | E_NOTICE); require ('class/db.php'); include ('class/user.php'); $user = new user(); ?>
class/db.php
<?php class DB { private $connection = NULL; private $result = NULL; private $counter=NULL; public function __construct($host=NULL, $database=NULL, $user=NULL, $pass=NULL){ $this->connection = mysql_connect($host,$user,$pass,TRUE) or die('Verbindung zur Datenbank konnte nicht hergestellt werden<br>Genauer Fehler: '.mysql_error()) ; mysql_select_db($database, $this->connection); } public function disconnect() { if (is_resource($this -> connection)) mysql_close($this -> connection); } public function query($query) { $this->result=mysql_query($query,$this -> connection); $this->counter=NULL; } public function fetchRow() { return mysql_fetch_assoc($this -> result); } public function count() { if($this->counter==NULL && is_resource($this -> result)) { $this->counter=mysql_num_rows($this -> result); } return $this -> counter; } } ?>
class/user.php
<?php class user { public $ID; public $name; public $geschlecht; public function __construct() { $DB = new db('localhost','...','...','...'); $this -> ID = $_SESSION['ID']; $DB -> query('SELECT * FROM user WHERE ID = \''. $this->ID .'\''); $row = $DB->fetchRow(); $this -> name = $row['name']; } public function setName ($name) { $this -> name = $name; } public function getName() { return $this -> name; } public function getID() { return $this -> ID; } public function getGeschlecht() { return $this -> geschlecht; } } ?>
Funktioneiren tut alles bisher so wie es soll.
Mfg
Beitrag zuletzt geändert: 8.5.2011 19:56:35 von testworld -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo testworld,
das sieht doch alles schon ganz gut aus. Das einzige, was mir hier auffällt ist, dass der Konstruktor für Deine DB-Klasse Standardwerte für die Argumente hat. D.h. man könnte eigentlich fogendes machen:
Allerdings würde das zum vorzeitigen Ende des Skriptes führen. Besser wäre es, wenn Du eine connect()-Methode bereit stellst (disconnect() hast Du ja schon) und noch Methoden, um einen Connection-String bzw. dessen Bestandteile setzen zu können. Jetzt wäre die Angabe der Verbindungsdaten beim Konstruktor optional, was ja auch die Standardwerte implizieren, und alternativ kann man die Daten später noch setzen/ändern.$db = new DB();
-
Hallo testworld,
wenn bei den Argumenten Standardwerte vorgegeben sind, dann gehe ich davon aus, dass man
schreiben kann und alles gut geht. Aber bei Deinem Konstruktor kann das gar nicht gut gehen. Somit sollten zumindest $host und $database Pflichtargumente sein:$db = new DB();
Das funktioniert zumindest, wenn man keinen Benutzernamen und kein Passwort für die Datenbank benötigt.public function __construct($host, $database, $user=NULL, $pass=NULL){ $this->connection = mysql_connect($host,$user,$pass,TRUE) or die('Verbindung zur Datenbank konnte nicht hergestellt werden<br>Genauer Fehler: '.mysql_error()) ; mysql_select_db($database, $this->connection); }
Die alternative ist halt eine extra connect()-Methode. -
Was darkpandemic angesprochen hat, ist wohl Geschmackssache.
Ansonsten sieht es für die ersten OOP Versuche sehr gut aus.
Bei der Userklasse würde ich die Attribute noch auf private setzen.
Die Frage ist in wie weit du auch schon mit Patterns/Mustern arbeiten möchtest,
wie Factory, Singleton, etc.
Deine MySQL Klasse wäre ein super Beispiel für Singleton.
Aber schön, dass du dir OOP selbst beibringst,
vielen wäre das wohl zu viel Arbeit :(
Aber die Arbeit, die man anfangs rein steckt, lohnt sich sehr :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage