Autor |
Nachricht |
achwasweisich
Threadersteller
Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht:
|
Verfasst Sa 01.03.2008 09:11
Titel (PHP) Increment geht bzw. geht nicht |
|
|
Kann mir mal einer erklären, warum Version 1 korrekt funktioniert, Version 2 aber nicht?
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.
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
|
|
|
|
|
Kraat
Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht:
|
Verfasst Sa 01.03.2008 10:47
Titel
|
|
|
Die Erhöhung des Increments gehört in die Schleife ^^
Code: |
$x = 0;
foreach(BEDINGUNG){
//anweisungen
$x++;
}
|
|
|
|
|
|
Anzeige
|
|
|
therapiekind
Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
|
Verfasst Sa 01.03.2008 12:44
Titel
|
|
|
Dürfte eigentlich nicht passieren. Liegt bestimmt an den Datensätzen!
@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?
Zuletzt bearbeitet von therapiekind am Sa 01.03.2008 12:48, insgesamt 2-mal bearbeitet
|
|
|
|
|
achwasweisich
Threadersteller
Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht:
|
Verfasst Sa 01.03.2008 13:48
Titel
|
|
|
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?
|
|
|
|
|
therapiekind
Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
|
Verfasst Sa 01.03.2008 14:54
Titel
|
|
|
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
|
|
|
|
|
achwasweisich
Threadersteller
Dabei seit: 27.09.2007
Ort: Stuttgarter Raum
Alter: -
Geschlecht:
|
Verfasst So 02.03.2008 11:23
Titel
|
|
|
Jau, funktioniert wie erwartet.
Keine Ahnung, warum das in meiner Class nicht funktioniert. Ist aber definitiv so.
|
|
|
|
|
therapiekind
Dabei seit: 14.03.2006
Ort: In deinem Kopf
Alter: -
Geschlecht: -
|
Verfasst So 02.03.2008 16:11
Titel
|
|
|
Mysteriös. Kannst du dein Programm rüberschieben? Bzw. die Teile, die nötig wären, das nachzuvollziehen.
Bin neugeirig.
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst So 02.03.2008 22:54
Titel
|
|
|
debugger einsetzen und schauen, welche variablen wann welche werte annehmen. script steppen...
|
|
|
|
|
|
|
|