kostenloser Webspace werbefrei: lima-city


OOP, so okey?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    testworld

    testworld hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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:
    $db = new DB();
    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.
  4. Autor dieses Themas

    testworld

    testworld hat kostenlosen Webspace.

    Mhh ganz ehrlich gesagt versteh ich nicht so ganz, was das bringen soll. Bzw. wo das Problem ist.

    Wenn ich es richtig verstehe meinst du: Falls wer
    $db = new DB();
    schreibt das es abgebrochen wird, aber sonst gibts keine Probleme mit dem Code, oder versteh ich dich falsch?
  5. Hallo testworld,

    wenn bei den Argumenten Standardwerte vorgegeben sind, dann gehe ich davon aus, dass man
    $db = new DB();
    schreiben kann und alles gut geht. Aber bei Deinem Konstruktor kann das gar nicht gut gehen. Somit sollten zumindest $host und $database Pflichtargumente sein:
    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);
      }
    Das funktioniert zumindest, wenn man keinen Benutzernamen und kein Passwort für die Datenbank benötigt.
    Die alternative ist halt eine extra connect()-Methode.
  6. 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 :)
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!