PHP Flasche: Suche Debugger ;-)

Hallo zusammen.

Ich muss ein PHP programm mit einer selbst definierten Funktion schreiben, daie dass Ergebniss ueber die Parameterliste zurueckgeben soll (Ergebniss 1 = Parameter1*Parameter2 / Ergebniss 2 = Parameter1 + Parameter2). Zusaetzlich sollen alle beteiligten Zahlen ausserhalb der Funktion ausgegeben werden.

Ich habe mir folgenden Code ueberlegt:

<html>
<head>
<?php

function rechnet($b, $n)
{
$b*$n= $f;
$b-$n= $d;

$f = $b;
$d = $n;
}

?>
</head>
<body>

<?php

$q= 5;
  $w= 7;
echo "vorher: $q, $w <br />";
rechnet(&$q,&$w);
echo "nachher: $q, $w";

?>

</body>
</html>

doch funktioniert er leider nicht :-(

Hat jemand eine Idee, warum nicht???? Danke!!!

  1. Hallo.

    Ergebniss 1 = Parameter1*Parameter2
    Ergebniss 2 = Parameter1 + Parameter2)

    Warum rechnest du dann "-"? Siehe unten:

    $b-$n= $d;

    Naja versuchsmal so:

    <?php
    function rechnet($b, $n)
    {
    $f = $b*$n
    $d = $b-$n
    return $f, $d;
    }
    ?>

    rechnet(&$q,&$w);

    Wozu diese "&"?

    rechnet($q,$w);

    reicht.
    mfg

    Phil Z.

    1. Wozu diese "&"?

      Du musst wisse, ich bin gerade dabei mir PHP ueber ein buch anzulesen und in dem sind Aufgaben drin, um zu pruefen, ob man das Kapitel verstanden hat. In diesem Kapitel ging es um call-by-reference Uebergaben bei Funktionen. Der return Befehl, wurde schon im vorherigen Kapitel erklaert, weshalb ich ihn nicht verwenden darf. Das & diehnt einfach dazu das sich die Orginalvariable, aendert, wenn sich die zugehoerige Variable in der Funktion aendert.

      MFG

      1. Achso.. dann solltest du das Kapitel noch einmal überarbeiten.

        Meine Funktion hast du ja schon ...

  2. Hello,

    Ich muss ein PHP Programm mit einer selbst definierten Funktion schreiben.
    Das Ergebnisssoll ueber die Parameterliste zurueckgeben werden.

    Ergebniss 1 = Parameter1 * Parameter2
       Ergebniss 2 = Parameter1 + Parameter2

    Zusaetzlich sollen alle beteiligten Zahlen ausserhalb der Funktion ausgegeben werden.

    function rechnet($b, $n, &ergebnis1, &$ergebnis2)

    {
        $ergebnis1 = $b*$n;          ## Ergebnisse stehen immer links von der Zuweisung
        $ergebnis2 = $b+$n;
      )

    echo "vorher: $q, $w <br />";
      rechnet($q,$w,$ergebnis1, $ergebnis2);
      echo "nachher: $ergebnis1, $ergebnis2";

    So sollte es beispielsweise klappen.
    Um die Funktionsargumente in beide Richtungen benutzen zu können, muss man sie auch entsprechend deklarieren. Das macht man üblicherweise bei der Funktionsdefinition und nicht bei der Benutzung.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hello,

      Um die Funktionsargumente in beide Richtungen benutzen zu können, muss man sie auch entsprechend deklarieren. Das macht man üblicherweise bei der Funktionsdefinition und nicht bei der Benutzung.

      http://www.php.net/manual/en/functions.arguments.php

      Das ist etwas schwabbelig ausgedrückt im Manual. Sollte das bei PHP ggf. auch möglich sein, Funktionsaufrufe nur temporär für Call by Refenence zu verwenden, indem man das & erst beim Aufruf verwendet? Ich kann es im Moment leider nicht selber ausprobieren.

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. Hello,

        http://www.php.net/manual/en/functions.arguments.php

        Das ist etwas schwabbelig ausgedrückt im Manual. Sollte das bei PHP ggf. auch möglich sein, Funktionsaufrufe nur temporär für Call by Refenence zu verwenden, indem man das & erst beim Aufruf verwendet? Ich kann es im Moment leider nicht selber ausprobieren.

        Ok, ausprobiert:

        <?php   ### reference.php ###

        function rechne($b, $n, &$ergebnis1, &$ergebnis2)
          {
            $ergebnis1 = $b*$n;          ## Ergebnisse stehen immer links von der Zuweisung!
            $ergebnis2 = $b+$n;
            $b = $ergebnis1;
            $n = $ergebnis2;
          }

        $q=7;
          $w=5;

        echo "vorher: $q, $w <br />";                 ## liefert 7 ,5
          rechne($q,$w,$ergebnis1, $ergebnis2);
          echo "nachher: q = $q, w = $w <br>";          ## liefert q = 7, w = 5
          echo "nachher: $ergebnis1, $ergebnis2 <br>";  ## liefert 35, 12

        echo "vorher: $q, $w <br />";                 ## liefert 7, 5
          rechne(&$q,&$w,$ergebnis1, $ergebnis2);
          echo "nachher: $q, $w <br>";                  ## liefert 35, 12

        ?>

        Erinnerung aufgefrischt:
        Man kann also in PHP den Call by Reference auch temporär verwenden, indem man die Funktion erst beim Aufruf dazu veranlasst, "den Rückweg zu öffnen"...

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. echo $begrüßung;

          Man kann also in PHP den Call by Reference auch temporär verwenden, indem man die Funktion erst beim Aufruf dazu veranlasst, "den Rückweg zu öffnen"...

          Vorausgesetzt, man verwendet die missbilligte Einstellung allow_call_time_pass_reference.

          echo "$verabschiedung $name";

          1. Hello,

            Man kann also in PHP den Call by Reference auch temporär verwenden, indem man die Funktion erst beim Aufruf dazu veranlasst, "den Rückweg zu öffnen"...

            Vorausgesetzt, man verwendet die missbilligte Einstellung allow_call_time_pass_reference.

            Ach,
            sowas ähnliches hatte ich im Hinterhirn, aber nicht wiedergefunden vorhin.
            Sollte man eigentlich sicherheitshalber (Programmierfehler) lieber ausschalten, oder?

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau