Probleme mit Arrays in unterschiedlichen PHP Versionen

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

  • #16
    Original geschrieben von XStone
    Der "if-do-while-Kram" find ich persönlich gut. Ich hatte am Anfang auch gestutzt, bis ich in einer Vorlesung über Algorithmen und Datenstrukturen davon überzeugt wurde. Es ist - allgemein betrachtet - weniger fehleranfällig.
    Das definiere bitte mal genauer.

    Im speziellen Fall kann ich da jedenfalls keinerlei Vorteil erkennen.
    Auch eine "normale" While-Schleife würde nur stillschweigend nichts tun, wenn die Abfrage keine Datensätze ergeben hätte.
    Falls damit abgefragt werden soll [1], ob die Query überhaupt fehlerfrei ausgeführt werden konnte - dazu ist empty Nonsense, da genügt eine einfache Abfrage auf false.

    Als Nachteil empfinde ich hingegen sogar, dass die Anweisung zum Holen der Daten (mysql_fetch_object) bei deinem Codebeispiel an zwei Stellen vonnöten ist.
    Ändert sich da jetzt mal was (Daten sollen nicht mehr aus einer MySQL-DB kommen, sondern sonstwo her) - dann hast du damit zwei Stellen, an denen du dieses Datenholen anpassen müsstest. Bei der normalen While-Schleife wäre es nur eine. Dein Vorgehen finde ich hier also eher fehleranfällig.


    [1] Kann aber eigentlich kaum sein, denn eine sinnvolle Fehlerbehandlung fehlt ja komplett.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #17
      Original geschrieben von penizillin
      wieso?
      Naja - weil die Struktur allgemein übertragbar ist:

      "Wenn die einleitende Schleife funktioniert"
      ----"beginne"
      -------eigentliche Schleiferoutine ---------
      ansonsten
      ---Fehlerausgabe

      ...sehr salopp ausgedrückt.

      Also:
      if(Abfrage funktioniert && Ergebnisse vorhanden){
      do{
      // Verarbeitung
      }while(Ergebnisse vorhanden)
      }
      else
      Fehlerausgabe

      oder:

      if(Abfrage funktioniert){
      while(Ergebnisse vorhanden){
      // Verarbeitung
      }
      }
      else
      Fehlerausgabe


      Ob es nun eine do while oder nur eine while Schleife ist, sei dahingestellt.
      Es geht hier mehr auf das Abfangen des Fehlers, wenn die Schleife erst gar nicht angefangen werden kann - obwohl das Abfangen des Fehlers bei mir fehlt.

      ...und dieses "Schema F" kann man für beliebige Routinen, die eine Datenquelle abfragen + Fehlerausgabe brauchen einsetzen.

      Ich habe mich sehr daran gewöhnt - zum Teil läßt sich so ein Konstrukt als Code-Tamplate einetzen.

      Aber ist halt Geschmackssache. Ich bin bis jetzt in C++ / C# damit sehr gut gefahren.
      Zuletzt geändert von XStone; 19.03.2007, 14:47.

      Kommentar


      • #18
        [1] Kann aber eigentlich kaum sein, denn eine sinnvolle Fehlerbehandlung fehlt ja komplett. [/B]
        Gebe ich Dir komplett Recht - hatte das ursprüngliche Beispiel jau auch nur als Beispiel für die Fehlerbeschreibung des eigentlichen Problems aufgeführt!

        Kommentar


        • #19
          es ist doch nicht schlimm, wenn die abfrage leer ausging und du mit while beginnst - du kommst einfach nicht in die schleife.

          problematisch bei dir ist das holen des ersten ergebnisses bereits bei der auswertung der if-bedingung. wozu dort? nur weil du unbedingt do-while machen möchtest? das ist es nicht wert. schau dir noch mal den code von ghostgambler an:

          Code:
          if(ergebnisse da){
             while( resultset-zeiger weiter gesetzt werden kann )
                 werte_aus
          }
          leicht erweiterbar mit einem einzigen else-block, der den fall abdeckt, dass die query keine datensätze fand. was ist daran fehleranfälliger als an deiner variante?

          Kommentar


          • #20
            Original geschrieben von XStone
            Naja - weil die Struktur allgemein übertragbar ist:

            "Wenn die einleitende Schleife funktioniert"
            ----"beginne"
            -------eigentliche Schleiferoutine ---------
            ansonsten
            ---Fehlerausgabe
            Welche einleitende Schleife?

            (Komm jetzt bitte nicht mit einer "IF-Schleife", wenn du noch ernstgenommen werden willst ...)
            Also:
            if(Abfrage funktioniert && Ergebnisse vorhanden){
            do{
            // Verarbeitung
            }while(Ergebnisse vorhanden)
            }
            else
            Fehlerausgabe
            Was soll daran besser sein, also andersherum?
            Code:
            if(kein Fehler aufgetreten)
               Schleife_zur_Verarbeitung_der_Daten {
                  ...
               }
            Ob es nun eine do while oder nur eine while Schleife ist, sei dahingestellt.
            Es geht hier mehr auf das Abfangen des Fehlers, wenn die Schleife erst gar nicht angefangen werden kann
            Gut - also absolut kein vernünftiger Grund für die unschöne do-while-Konstruktion.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #21
              Ok - ich beende mal die Diskussion.

              Kennt ihr den Spruch: "Ihr habt Recht und ich hab meine Ruhe?"


              Ich sehe, dass wir alle das selbe meinen.
              Das Problem liegt einfach an meinen zu rudimentären Grundkenntnissen in PHP. In den Programmiersprachen, in denen ich mich "heimisch" fühle, hätte ich das bestimmt auch anders verfaßt.
              Wie gesagt: Es waren die ersten Gehversuche und ich sehe ein, dass Eure Quelltextbeispiele wirklich besser sind.

              Vom Prinzip her haben wir doch den selben Grundgedanken: Fehlerfallabfrage + Schleifendurchlauf.

              Ein schönes Beispiel hierzu ist mein gefundener "Clone"-Befehl:
              Ich hatte die Doku zu PHP abgeklappert, wie ich mittels new() oder irgend etwas anderem ein neues Objekt erstellen kann - dass das Schlüsselwort "stdclass" ist, habe ich nicht gefunden und immer mit ... "= new()" ... oder "new (object)", ... herumprobiert.
              Stattdessen habe ich in einem anderen Quelltext irgendwann den "Clone"-Befehl gesehen - ausprobiert - und lief. Nachgeschlagen ergab die Doku für mich, dass es genau das ist, was ich brauchte.
              Dass es dann widerum besser geht und sich hier alle aufregen wie ich denn überhaupt den "Clone"-Befehl nutzen könne, habt ihr mir hier bewiesen. ...leider...

              Wie gesagt: "Anfänger" und 1.PHP-Projekt... Hallo?


              Es ist einfach die Portierung auf PHP, die - vom Grundgedanken her ok ist - aber in der Praxis noch reichlich Optimierungsmöglichkeiten bildet.

              In C++ hätte ich das Dingen wie ihr es auf meinem o.a. Link seht an einem Wochenende hinbekommen - und nicht ein Jahr(!) nach Feierabend in PHP...

              Kommentar


              • #22
                Original geschrieben von wahsaga
                Welche einleitende Schleife?
                Sorry - da hab ich mich verhaspelt. Hast latürnich Recht (ups - wieder verhaspelt )

                Kommentar

                Lädt...
                X