mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 19.04.2024 03:19 Benutzername: Passwort: Auto-Login

Thema: (PHP) Increment geht bzw. geht nicht vom 01.03.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> (PHP) Increment geht bzw. geht nicht
Seite: 1, 2, 3  Weiter
Autor Nachricht
achwasweisich
Threadersteller

Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht: Männlich
Verfasst Sa 01.03.2008 09:11
Titel

(PHP) Increment geht bzw. geht nicht

Antworten mit Zitat Zum Seitenanfang

Kann mir mal einer erklären, warum Version 1 korrekt funktioniert, Version 2 aber nicht? * Keine Ahnung... *

Code:

 public function getNextTerminReihenfolge() {
       if (is_array($this->arrTermine)) {
          $x = 0;
          foreach ($this->arrTermine as $termin) {
             if ($termin->getReihenfolge() > $x) {
                $x = $termin->getReihenfolge();
             }
          }
          $x += 1;  // Version 1 ODER
          $x++;      // Version 2
          return $x;
       }
       return 0;
 }

Mit Version 2 wird $x nicht korrekt um 1 erhöht. Ich versteh aber nicht warum. * Ich geb auf... *

Nochmal zum deutlich machen:
Wenn Version 1 korrekterweise 5 zurückgibt, dann gibt Version 2 als Wert 4 zurück.
Und das bei gleichem Datenbestand.

Es kommt natürlich immer nur eine der beiden Versionen zum Einsatz,
ich hab es nur der Einfachheit halber zusammen reingeschreiben.



Ich verstehe das in so fern nicht, als das ja
Code:

function foo() {
  $x = 1;
  $x++;
  return $x;
}

völlig korrekt als Wert "2" liefert.

[edit by Nimroy]
Titel geändert.


Zuletzt bearbeitet von Nimroy am Sa 01.03.2008 12:49, insgesamt 3-mal bearbeitet
  View user's profile Private Nachricht senden
Kraat

Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht: Männlich
Verfasst Sa 01.03.2008 10:47
Titel

Antworten mit Zitat Zum Seitenanfang

Die Erhöhung des Increments gehört in die Schleife ^^

Code:

$x = 0;
foreach(BEDINGUNG){
       //anweisungen
       $x++;
}
  View user's profile Private Nachricht senden
Anzeige
Anzeige
therapiekind

Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
Verfasst Sa 01.03.2008 12:44
Titel

Antworten mit Zitat Zum Seitenanfang

Dürfte eigentlich nicht passieren. Liegt bestimmt an den Datensätzen! *bäh*

@Kraat: Er will ja nicht $x für jeden Schleifendurchgang erhöhen, er will nur das Ergebnis der Schleife um 1 erhöhen. Will er doch, oder? * Keine Ahnung... *


Zuletzt bearbeitet von therapiekind am Sa 01.03.2008 12:48, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
achwasweisich
Threadersteller

Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht: Männlich
Verfasst Sa 01.03.2008 13:48
Titel

Antworten mit Zitat Zum Seitenanfang

Richtig, zunächst wird ja $x anhand einer Funktion dem höchsten Wert zugeordnet, der "auffindbar" ist.
Da die Funktion aber eben den nächsten freien Wert zurückliefern soll, wird $x eben um 1 erhöht.

An dem Datenbestand kann es definitiv nicht liegen, denn der ist zumindest in der Entwicklungsumgebung absolut statisch in einer Textdatei auf meiner lokalen Platte. Außerdem kann ich ja beliebig zwischen den beiden Versionen hin- und herspringen, indem ich die Kommentierung ändere und das Ergebnis ist dann immer "5" - "4" - "5" - "4" - usw.

Scheint irgendwie ein Bug zu sein.
Ob es daran liegt, daß es innerhalb einer Klasse ist? * Keine Ahnung... *
  View user's profile Private Nachricht senden
therapiekind

Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
Verfasst Sa 01.03.2008 14:54
Titel

Antworten mit Zitat Zum Seitenanfang

Hab's versucht nachzubauen, funktioniert wie erwartet. Probier mal:

Code:
<pre>
<?php

class Termin
{
    private $reihenfolge;

    public function Termin($rf)
    {
        $this->reihenfolge = $rf;
    }
   
    public function getReihenfolge()
    {
        return $this->reihenfolge;
    }
}

class Test
{
    private $arrTermine = array();
   
    public function Test($termine)
    {
        $this->arrTermine = $termine;
    }

    public function getNextTerminReihenfolge($version)
    {
        if (is_array($this->arrTermine))
        {
            $x = 0;
            foreach ($this->arrTermine as $termin)
            {
                if ($termin->getReihenfolge() > $x)
                {
                    $x = $termin->getReihenfolge();
                }
            }
            if ($version === 1)
            {
                echo "\nWir benutzen +=\n";
                $x += 1;
            }
            elseif ($version === 2)
            {
                echo "\nWir benutzen ++\n";
                $x++;
            }
            return $x;
        }
        return 0;
    }
}

$termine = array(new Termin(2),new Termin(1),new Termin(4),new Termin(2),new Termin(3),new Termin(1));

$test = new Test($termine);

echo $test->getNextTerminReihenfolge(1);
echo $test->getNextTerminReihenfolge(2);

?>
</pre>


Zuletzt bearbeitet von therapiekind am Sa 01.03.2008 14:55, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
achwasweisich
Threadersteller

Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht: Männlich
Verfasst So 02.03.2008 11:23
Titel

Antworten mit Zitat Zum Seitenanfang

Jau, funktioniert wie erwartet.
Keine Ahnung, warum das in meiner Class nicht funktioniert. Ist aber definitiv so.
  View user's profile Private Nachricht senden
therapiekind

Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
Verfasst So 02.03.2008 16:11
Titel

Antworten mit Zitat Zum Seitenanfang

Mysteriös. Kannst du dein Programm rüberschieben? Bzw. die Teile, die nötig wären, das nachzuvollziehen.

Bin neugeirig.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst So 02.03.2008 22:54
Titel

Antworten mit Zitat Zum Seitenanfang

debugger einsetzen und schauen, welche variablen wann welche werte annehmen. script steppen...
  View user's profile Private Nachricht senden
 
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2, 3  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.