Ankündigung

Einklappen
Keine Ankündigung bisher.

Klasse für das erstellen einer neuen nächst höheren ID

Einklappen

Neue Werbung 2019

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

  • Klasse für das erstellen einer neuen nächst höheren ID

    Hallo PHPler,

    da ich immer mehr in OOP probiere meine Kenntnisse zu erweitern habe ich heute mal eine kleine Klasse geschrieben die einem die Arbeit abnimmt eine nächst höhere ID zu kreieren. Also in Form von auto_increment bei MySql zum Beispiel.

    Dabei habe ich versucht 2 Fälle abzudecken.

    1.) Fall

    falls eine maximale ID aus der Datenbank kommt (per Abfrage mittels max() in MySql) dann kann dieser Wert als einzelner Wert übergeben werden. Hier habe ich das symbolisch mit einer fest vergebenen Zahl als Probe zum testen gemacht.

    2.) Fall

    es kann ein Array übergeben werden und es wird mitels der Funktion max() der höchste numerische Wert ermittelt.

    Hier mal meine Codeteile, einmal die Klasse und dann der Aufruf und Einsatz der Klasse in beiden Fällen.

    PHP-Code:
    <?php
    /*
    *
    *    ID Generator Klasse
    *
    */
    class IdGeneratorClass{
        
        private 
    $id;
        private 
    $lastId;
        private 
    $idArray;
        
        public function 
    __construct(){}
        
        
    /*
        *
        *    setzen einer id wenn es eine einzelne feststehende zahl ist
        *    
        */
        
    public function setID($id){
            
            
    $this->id $id;
        }
        
        
    /*
        *
        *    wenn die datzen aus einem array kommen mit prüfung ob übergebener parameter ein array ist
        *
        */
        
    public function setIdArray($idArr = array()){
            
            if(!
    is_array($idArr)){
                
                throw new 
    Exception('this Parameter is not array');
            } else {
                
                
    $this->idArray $idArr;
            }
        }
        
        
    /*
        *
        *    ermitteln des höchsten wertes des arrays
        *
        */
        
    public function searchMaxInt(){
            
            
    $maxId max($this->idArray);
            
    $this->id $maxId;
        }
        
        
    /*
        *
        *    prüfen ob übergebene zahl eine integer zahl ist bevorsie freigegeben wird
        *
        */
        
    public function checkValidateInt(){
            
            if(!
    is_int($this->id)){
                
                throw new 
    Exception('this ID ist not integer');
            } else {
                
                
    $this->lastId $this->id;
            }
        }
        
        
    /*
        *
        *    erhaltene id um eins erhöhen
        *
        */
        
    public function countIdToNext(){
            
            
    $this->lastId += 1;
        }
        
        
    /*
        *
        *    fertige generierte id ausgeben für weiteres verarbeiten
        *
        */
        
    public function getId(){
            
            return 
    $this->lastId;
        }
    }
    ?>
    Und hier der Einsatz.

    PHP-Code:
    <?php
    error_reporting
    (E_ALL E_STRICT);
    ini_set('display_errors'TRUE);

    require_once(
    'IdGeneratorClass.php');

    /*
    *
    *    wenn ein array übergeben wird 
    *
    */
    $newId_1 = new IdGeneratorClass();

    $werte = array(17785);

    $newId_1->setIdArray($werte);
    $newId_1->searchMaxInt();
    $newId_1->checkValidateInt();
    $newId_1->countIdToNext();

    $id_1 $newId_1->getId();

    echo 
    $id_1.'<br><br>';

    /*
    *
    *    wenn eine einzelwert übergeben wird
    *
    */
    $newId_2 = new IdGeneratorClass();

    $newId_2->setID(45);
    $newId_2->checkValidateInt();
    $newId_2->countIdToNext();

    $id_2 $newId_2->getId();

    echo 
    $id_2;
    ?>
    Ich habe das getestet und es funktioniert ordentlich.

    Ich habe in dem Sinne keine Frage sondern würde gern eure Meinung dazu hören bzw. lesen. Habe ich eventuell etwas vergessen mit einzubinden was wichtig wäre oder ist das generell Quatsch so wie ich es gemacht habe oder oder oder. Halt eure Meinung würde ich gern lesen.

    Vielen Dank für eure Zeit die ihr euch nehmt das mal anzusehen.


    Ps.:
    Es ist auch das erste mal das ich mit Exceptions arbeite, ich habe mich immer schwer damit getan.
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de


  • #2
    Wofür braucht man das?

    Ansonsten siehts recht kompliziert aus finde ich. Eigentlich reichen 2 Methoden.

    PHP-Code:
    $obj = new IdGeneratorClass();
    $obj->addId(5); // hier kann man entweder eine einzelne Zahl ODER ein Array übergeben, das handelt die Methode
    $obj->getNextId(); // hier bekommt man die größe ID zurück. 
    Alle anderen Methoden sind doch theoretisch total unnötig. Das interessiert nur die Klasse intern, aber nicht den Benutzer der Klasse.

    Ansonsten frag ich mich wann man sowas schon braucht. Wenn man mal nen Array hat dann reicht auch:
    PHP-Code:
    $array = array (1,2,3,4,5,6);
    $nextId max($array)+1
    Wüsste nicht warum man für sowas ne komplette Klasse braucht.

    Kommentar


    • #3
      LOL, Deine OOP-Bestrebungen in allen Ehren, aber wer braucht sowas? Ein INT kann ich locker mit ++ inkrementieren, ein Array brauche ich nicht künstlich verwalten, als auto_increment-Ersatz sind numerisch verwaltete IDs ohnehin nicht zu gebrauchen (Stichwort Nebenläufigkeit von Requests). Am meisten stört mich:

      - der fehlende Nutzen
      - das häßliche Interface (x Methoden für einen max/inkrement-Vorgang?) 1)
      - die Mehrfachverwaltung von Properties (man sollte meinen, es genügt, ID zu verwalten, statt ID und IDArray und lastID ..., das sind Arbeitsdaten!)
      - die implizite Logik (max aus Array, könnte ja genauso das erste oder letzte Item verwendet werden)

      1) vgl.

      PHP-Code:
      function getId ($in null)
        {
        if (
      null === $in
          {
          return (
      1);
          }

        if (
      is_array ($in))
          {
          return (
      max ($in) + 1);
          }

        if (
      is_numeric ($in))
          {
          return (
      $in 1);
          }

        return (
      false);
        } 
      Voila. Klares Interface, nachvollziehbare Logik, kein umständlicher Umbau, den man eh nicht braucht.
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Für mich ist das alles nur Übung, also das ist nicht für einen Produktiveinsatz gedacht.

        Aber danke für die Kritik, dass kann mich am Ende nur weiter bringen, darum habe ich ja um eure Meinung gefragt.

        Nikosch du schriebst in deinem Code ja folgendes.

        PHP-Code:
        if (is_numeric ($in))
            {
            return (
        $in 1);
            } 
        Das heist ich könnte da ja aber auch einen numerischen String übergeben, weil der prüft nur ob das was man übergibt Numerisch ist, aber nicht vom Typ int. Wäre es an der stelle nicht sinnvoller auf is_int($id); zu prüfen?
        Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
        http://www.lit-web.de

        Kommentar


        • #5
          Naja, nachdem Du - soweit ich mich erinnere - schon mehrere solche Threads abgesetzt hast, hier meine Empfehlung: Setze Dich unbedingt noch einmal mit dem Konzept (also dem Grundgedanken, Zweck) von OOP auseinander. Allein das sehe ich schon oben verletzt. Du scheinst immer noch zu Container-orientiert zu denken (ein pseudoglobaler Kontext, in den man alles reinwerfen kann), statt zweckorientiert: Was will ich eigentlich verwalten, wie will ich darauf zugreifen, wie ist das Verhalten definiert? etc.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Vor allem lasen sich damit NICHT wirklich fortlaufende und eindeutige IDs erstellen, weil wenn man z.b. ein paar Ids am ende löscht wird man eigentlich schon verwendete id's als neue id's bekommt, was im endeffekt nicht wirklich der Sinn von ids ist (wurde imho schon in diversen anderen threads erörtert wo es um das "füllen von lücken" ging, etc).

            Wenn man solche ids will/braucht dann braucht man irgendwo ein System das diese ids verwaltet und die letzte speichert und das nächste mal die nächste zurückgibt, aber nicht einfach die größte vorhandene erhöht.
            robo47.net - Blog, Codeschnipsel und mehr
            | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

            Kommentar


            • #7
              Zitat von nikosch Beitrag anzeigen
              Naja, nachdem Du - soweit ich mich erinnere - schon mehrere solche Threads abgesetzt hast
              Nee bis jetzt hatte ich immer nur gefragt wenn ich ein Problem hatte, hier gehts mir nur um Meinungen. Ich will weiter kommen und mich weiter entwickeln, von daher frage ich hier und nehme natürlich Kritik gern an.
              Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
              http://www.lit-web.de

              Kommentar


              • #8
                Zitat von robo47 Beitrag anzeigen
                Vor allem lasen sich damit NICHT wirklich fortlaufende und eindeutige IDs erstellen, weil wenn man z.b. ein paar Ids am ende löscht wird man eigentlich schon verwendete id's als neue id's bekommt, was im endeffekt nicht wirklich der Sinn von ids ist (wurde imho schon in diversen anderen threads erörtert wo es um das "füllen von lücken" ging, etc).

                Wenn man solche ids will/braucht dann braucht man irgendwo ein System das diese ids verwaltet und die letzte speichert und das nächste mal die nächste zurückgibt, aber nicht einfach die größte vorhandene erhöht.
                Stimmt, daran habe ich tatsächlich überhaupt nicht gedacht, dass ist natürlich blöd. Da gebe es ja dann z.B. die möglichkeit den entsprechenden Wert in eine Textdatei zu speichern und sich das dann daraus heraus zu nehmen um das Prinzip nach zu bilden?
                Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                http://www.lit-web.de

                Kommentar


                • #9
                  Wäre es an der stelle nicht sinnvoller auf is_int($id); zu prüfen?
                  Ja.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Zitat von litterauspirna Beitrag anzeigen
                    Stimmt, daran habe ich tatsächlich überhaupt nicht gedacht, dass ist natürlich blöd. Da gebe es ja dann z.B. die möglichkeit den entsprechenden Wert in eine Textdatei zu speichern und sich das dann daraus heraus zu nehmen um das Prinzip nach zu bilden?
                    Ja, irgendeine möglichst permanente Datenquelle, Datei oder Datenbank, wobei ich den sinn in dem ganzen auch nicht sehen kann, ich denke um oop zu lernen gibt es sinnvolleres wie sowas zu schreiben.
                    robo47.net - Blog, Codeschnipsel und mehr
                    | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

                    Kommentar


                    • #11
                      Zitat von robo47 Beitrag anzeigen
                      Ja, irgendeine möglichst permanente Datenquelle, Datei oder Datenbank, wobei ich den sinn in dem ganzen auch nicht sehen kann, ich denke um oop zu lernen gibt es sinnvolleres wie sowas zu schreiben.
                      Ok das ist schon ein Argument, wie gesagt das war für mich nur zur Übung. Vieleicht hast du eine Idee oder einen kleinen Tipp für mich was für mich gut wäre zur Übung um ein besseres Gefühl und Verständnis für OOP zu bekommen?

                      Wäre unheimlich nett.
                      Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                      http://www.lit-web.de

                      Kommentar


                      • #12
                        Wie wäre es den mit deinen bestehenden Projekten?
                        1. Ist es ziemlich "geil und lehrreich" wenn man sich 2 Jahre alte Codes anschaut die man produziert hat.
                        Einfach refactoring durchführen, Code analysieren, scahuen wo es sinnvoll wäre Klassen zu benutzen und fertig

                        So mach ich das meißtens.

                        Kommentar


                        • #13
                          Zitat von ragtek Beitrag anzeigen
                          Wie wäre es den mit deinen bestehenden Projekten?
                          1. Ist es ziemlich "geil und lehrreich" wenn man sich 2 Jahre alte Codes anschaut die man produziert hat.
                          Einfach refactoring durchführen, Code analysieren, scahuen wo es sinnvoll wäre Klassen zu benutzen und fertig

                          So mach ich das meißtens.
                          Stimmt ich könnte meinen online Shop umschreiben und dabei noch einige Verbesserungen rein bringen, das ist ne gute Idee.
                          Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                          http://www.lit-web.de

                          Kommentar


                          • #14
                            Und im Hinterkopf behalten => "Nicht alles muss OOP sein"

                            Ich hab gemerkt das Leute gerade am Anfang dann gerne mal übertreiben und "alles umsetzen".
                            Aber das wurde hier im Thread eh schon erwähnt

                            Kommentar


                            • #15
                              Naja mir hat neben der Lektüre von Büchern am meisten gebracht objekt-orientierten Code anzuschauen, zu verwenden und zu erweitern, seien es Bibliotheken, Frameworks oder sonstwas.
                              robo47.net - Blog, Codeschnipsel und mehr
                              | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

                              Kommentar

                              Lädt...
                              X