Ostersonntage berechnen


tklustig

Erfahrenes Mitglied
Hallo Leute,
folgende Funktion berechnet mir, abhängig von den Formulareingaben den Ostersonntag. Ich frage mich, warum das klappt, da die Funktion nix zurück gibt. Zumindest ist nirgends ein return definiert. Weiß jemand Rat? Ich weiß wohl, dass eine Referenz übergeben wird, aber auch ein Speicheradresse muss doch zurück gegeben werden, oder täusche ich mich?
PHP:
        <?php
        // Großere Jahreszahl zuerst? Tauschen!
        $anfang = $_POST["anfang"];
        $ende = $_POST["ende"];
        if ($anfang > $ende) {
            $temp = $anfang;
            $anfang = $ende;
            $ende = $temp;
        }
        ?>
        <table border='1'>
            <tr><td><b>Jahr</b></td>
                <td><b>Datum</b></td></tr>
            <?php
            // Schleife über alle Jahreszahlen
            for ($jahr = $anfang; $jahr <= $ende; $jahr++) {
                ostersonntag($jahr, $tag, $monat);
                ?><tr><td><?= $jahr ?></td><td><?= $tag . "." . $monat . "." . $jahr ?></td></tr><?php
                }
                ?> </table>

        <?php

        function ostersonntag($j, &$t, &$m) {
            // Berechnung von klein d
            $d = ((15 + floor($j / 100) - floor($j / 400) - floor((8 * floor($j / 100) + 13) / 25)) % 30 + 19 * ($j % 19)) % 30;

            // Berechnung von groß D
            if ($d == 29)
                $D = 28;
            else if ($d == 28 && $j % 17 >= 11)
                $D = 27;
            else
                $D = $d;

            // Berechnung von klein e
            $e = (2 * ($j % 4) + 4 * ($j % 7) + 6 * $D + (6 + floor($j / 100) - floor($j / 400) - 2) % 7) % 7;

            // Berechnung von Tag und Monat
            $m = "03";
            $t = 21 + $e + $D + 1;
            if ($t > 31) {
                $m = "04";
                $t = $t - 31;
            }
            if ($t < 10)
                $t = "0" . $t;
        }
        ?>
 

tklustig

Erfahrenes Mitglied
Seltsam. in der Programmierspache C muss man Pointer doch auch mit return zurückgeben. Daß PHP das nicht zwingend vorschreibt hat mich halt überrascht.
Gebrauche den CallByReference-Operator so gut wie nie, immer nur CallByValue. Gut zu wissen....
Dieser Thread kann geschlossen werden.
Danke für deine Antwort!
 

ComFreek

Mod | @comfreek
Moderator
in der Programmierspache C muss man Pointer doch auch mit return zurückgeben.
Muss man das?
C:
void myFunction(char *myPtr) {
  *myPtr = 'a';
}
klappt doch auch ohne return. Nur bei PHP muss man keinen Stern oder Derefenzierungsoperator mehr angeben, wenn man auf das Argument lesend oder schreibend zugreift.
 

sheel

I love Asm
Eine ähnlichere Schreibweise gibts in C++, und auch da geht es ohne return:
C++:
void myFunction(char &myPtr) {
    myPtr = 'a';
}