mustino: einfache for-Schleife mit return-Rückgabewert

Hallo,

ich verstehe nicht, wieso eine return-Anweisung die Schleife bzw. die Methode nicht beendet?

Ich habe folgenden einfachen Code:

Methode:
function richtig(){
        $fzahl=0;
 for($v=0; $v<$num_1; $v++){
     if(isset($_POST["haken".$v])){
         $teingabe = "eingabe".$v;
  if(is_numeric($_POST[$teingabe])){
     continue;
  }
  else{
       return false;
  }
     }
            continue;
 }
 return true;
}

Abfrage:

if(richtig()){
echo "richtig";
}
else{
echo "falsch";
}

Wenn in der methode die "return false" zurück gibt, dann müste doch die for-Schleife beendet werden und die ein "falsch" auf meinem Bildschirm erscheinen? Aber es erscheint jedesmal ein "richtig" ???

Ich wäre euch dankbar, wenn Ihr mir helfen könntet.

Vielen Dank im vorraus.

Gruß

Mustino

  1. hi,

    hast du bereits überprüft, ob in den entsprechenden zweig hineingesprungen wird?

    gruss,
    wahsaga

    1. hast du bereits überprüft, ob in den entsprechenden zweig hineingesprungen wird?

      Ja, der "false"-Zweig wird auf jeden Fall durchlaufen, das ich anhand mit der echo-funktion getestet habe. Deshalb verstehe ich den Sinn nicht.

      Gruß

      Mustino

  2. hi,

    ach so, das seh ich jetzt erst ...

    function richtig(){
     for($v=0; $v<$num_1; $v++){
    ...
           return false;
      }
    ...
     return true;
    }

    return false beendest an der stelle die for-schleife.
    und vor dem ende der _funktion_ schreibst du return true - also gibt deine funktion auch true zurück.

    gruss,
    wahsaga

    1. Hi,

      return false beendest an der stelle die for-schleife.

      Nein, es beendet die Funktion.

      und vor dem ende der _funktion_ schreibst du return true - also gibt deine funktion auch true zurück.

      Ich hab eher $num_1 im Verdacht...

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. return false beendest an der stelle die for-schleife.

        Hi,

        lasse ich die Funktion nicht als Funktion laufen und ersetze die "true" und "false" Rückgabewerte durch "falsch" und "richtig" dann funktioniert das ganze!

        Lasse ich die "//" aber weg und lösche "falsch" und "richtig" und rufe die Funktion unten mit echo richtig()... auf bekomme ich als ergebnis bei jeder belegung immer richtig, obwohl der Zweig "falsch" durchlaufen wird!

        Info:
        $v ist die Zählervariable und $num_1 ist ein fester Integer in dem Fall 4.

        // function richtig(){
        $v=-1;
        do{
        $v++;
        if($v!=$num_1){
            if ( (isset($_POST["haken".$v])) && (! is_numeric ($_POST["eingabe".$v])) ){
        //return false;
         echo "falsch";
         break;
        }
        }
        else{
           echo "richtig";
          //return true;
        }
        }
        while($v<$num_1);
        // }

        //echo richtig() ? "richtig" : "falsch";

  3. Hi,

    ich verstehe nicht, wieso eine return-Anweisung die Schleife bzw. die Methode nicht beendet?

    Ich würde eher vermuten, daß der entsprechende Zweig gar nicht erreicht wird.

    function richtig()
    {
        $fzahl=0;

    wird nirgends benutzt

    for($v=0; $v<$num_1; $v++)

    $num_1 kommt woher? Und hat welchen Wert?

    {

    Diesen ganzen Block:

    if(isset($_POST["haken".$v]))
            {
                $teingabe = "eingabe".$v;
                if(is_numeric($_POST[$teingabe]))
                {
                    continue;
                }
                else
                {
                    return false;
                }
            }
            continue;

    würde ich als

    if ( (isset($_POST["haken".$v])) && (! is_numeric($_POST["eingabe".$v])) )
                 return false;

    schreiben.

    }
        return true;
    }

    if(richtig()){
    echo "richtig";
    }
    else{
    echo "falsch";
    }

    Würde ich als
    echo richtig() ? "richtig" : "falsch";
    schreiben.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.