PHP und Klassen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    ich wollte einen einstieg in klassen, nicht mehr nicht weniger.
    Das kann ich verstehen!!
    Übung macht den Meister!

    Ich möchte dir dabei noch etwas auf den Weg mitgeben:
    Allerdings, solltest du "moderner" arbeiten. also nur noch für PHP5 und neuer.
    Hier mal ein rudimentärer etwas modernerer Ansatz:
    Wie schon gesagt, rudimentär, aber funktionsfähig!!
    Das Interface: idb.php
    PHP-Code:
    interface Idb
    {
      public function 
    __construct($dburl);
      public function 
    query($query);
      public function 
    fetch($res);

    Eine mysql klasse: db_mysql.php
    PHP-Code:
    class db_mysql implements Idb
    {
      private 
    $handle FALSE;
      
      public function 
    __construct($dburl)
      {
        
    $path   parse_url($dburl);
        
    $port   = isset($path['port'])?':'.$path['port']:'';
        
    $server $path['host'].$port;
        
        
    $this->handle mysql_connect($server,$path['user'] ,$path['pass']);
        if(
    FALSE === $this->handle) Throw new Exception(mysql_error());
        
    $select mysql_select_db(trim($path['path'],"/"),$this->handle);
        if(
    FALSE === $select) Throw new Exception(mysql_error());
      }

      public function 
    query($query)
      {
        
    $res mysql_query($query,$this->handle);
        if(
    FALSE === $res) Throw new Exception(mysql_error());
        return 
    $res;
      }
      
      public function 
    fetch($res)
      {
        return 
    mysql_fetch_assoc($res);
      }

    Eine sqlite Klasse: db_sqlite.php
    PHP-Code:
     class db_sqlite implements Idb
    {
      private 
    $handle FALSE;
      
      public function 
    __construct($dburl)
      {
        
    $path parse_url($dburl);
        
    $this->handle sqlite_open(trim($path['path'],"/"));
        if(
    FALSE === $this->handle) Throw new Exception('Can not open: '.$dburl);
      }

      public function 
    query($query)
      {
        
    $res sqlite_query($query,$this->handle);
        if(
    sqlite_last_error($this->handle))
          Throw new 
    Exception(sqlite_error_string(sqlite_last_error($this->handle)));
        return 
    $res;
      }
      
      public function 
    fetch($res)
      {
          return 
    sqlite_fetch_array($res,SQLITE_ASSOC);
      }

    Die Faktory Klasse: db.php
    PHP-Code:
     class db
    {
      static public function 
    factory($dburl)
      {
        
    $path parse_url($dburl);
        
    $type 'db_'.$path['scheme'];
        return new 
    $type($dburl);
      }

    Der zugehörige Autoloader und ein kleines Testscript:
    PHP-Code:
    function __autoload($class_name)
    {
         
    $class_name =  strtolower($class_name);
         require_once 
    $class_name '.php';
    }

    try
    {
      
    // $db = db::factory('mysql://test:test@localhost/test');
      // $db = db::factory('mysql://test:test@localhost:3036/test')
      
    $db db::factory('sqlite://localhost/test');
      
    $res $db->query('SELECT * FROM irgendwas');
      while(
    $row $db->fetch($res)) print_r($row);
    }
    catch (
    Exception $e)
    {
      echo 
    '<pre>';
      echo 
    'Ausnahme gefangen: '"\n",  
              
    $e->getMessage(), "\n",
              
    $e->getTraceAsString(), "\n";
      echo 
    '</pre>';

    Und ja, die andern haben völlig recht!
    Du solltest dich auch mit PDO, doctrine und propel/creole beschäftigen.
    Wir werden alle sterben

    Kommentar


    • #17
      ok, danke für die tipps.
      werd mich dann mal ans werk machen und lernen

      Kommentar


      • #18
        das es immer wieder leute geben muss, die topics durch ihre belustigungen verschönern (ansichtssache) müssen.
        für alle die es immer noch nicht verstanden haben, es geht nicht um eine mysqli klasse, ich hätte auch eine nehmen können die die lustigkeit einiger comments bewertet.
        Wie H2O schon sagte, die Kommentare waren keinesfalls belustigend gemeint. Solche Erweiterungen auf Plattformen zu portieren, unter denen diese nicht vorhanden sind, können sehr nützlich sein. So kannst du in deinem nächsten Projekt beispielsweise auf mysqli setzen, ohne das diese Erweiterung wirklich installiert sein muss.
        Ich habe selbst schon mit dem Gedanken gespielt, die PDO-Klasse zu implementieren.

        Kommentar


        • #19
          jau, dann sorry dafür

          hab wohl nen schlechten tag erwischt und bin launisch

          Kommentar

          Lädt...
          X