PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : warum funktion. eine Funktion immer noch,wenn ich return Wert; durch echo; ersetze?



Mr.Nobody
10-11-2003, 19:55
Hallo,

Ich habe in meinem Buch gelesen, daß eine Funktion immer einen Rückgabewert braucht mit return = xxxx;

Jetzt habe ich eine Funktion aus einem Buch verändert, und habe return durch echo oder print ersetzt. Das Programm gibt bei Aufruf aber noch immer das richtige Ergebnis
aus. Wie ist das möglich? Wird die Funktion dann noch vollständig abgearbeitet?
Oder ignoriert der Parser auch Fehler?

<html>
<head>
</head>
<body>
<?
$Start = "08.03.02";
$Ende = "30.11.02";
echo DatumsDiff("$Start", "$Ende");
function DatumsDiff($Start, $Ende) {

$Tag1 = (int) substr($Start, 0, 2);
$Monat1 = (int) substr($Start, 3, 2);
$Jahr1 = (int) substr($Start, 6, 4);
$Tag2 = (int) substr($Ende, 0, 2);
$Monat2 = (int) substr($Ende, 3, 2);
$Jahr2 = (int) substr($Ende, 6, 4);
if (checkdate($Monat1, $Tag2, $Jahr2) and
checkdate($Monat2, $Tag2, $Jahr2))
{
$Datum1 = mktime(0,0,0, $Monat1, $Tag1, $Jahr1);
$Datum2 = mktime(0,0,0, $Monat2, $Tag2, $Jahr2);
$Diff = (Integer) (($Datum2 -$Datum1) / 3600 / 24);

echo $Diff;
// return $Diff;
// print $Diff;
}
else {
return -1;

}


}

?>
</body>
</html>

Ich frage deshalb, damit ich das mit dem Rückgabewert und return besser verstehe.

mfG
N.

sixfriends
10-11-2003, 22:13
Mit dem return verhält sich das folgendermassen:

Wenn du beispielsweise einen Codeschnippsel hast und willst darin eine Rechnung auslagern, z.B.

function rechne($x, $y)
{
$z = $x + $y;
return $z;
}

$result = rechne(8,34);
echo $result;

Wenn der Code ausgeführt wird, dann wird die Funktion zunächst überlesen. Mit dem Aufruf von rechne(Zahl1, Zahl2) wird dann die Funktion ausgeführt, wobei in diesem Fall 8 und 34 übergeben werden. Die werden addiert und in $z geschrieben.
Wenn ich jetzt ein return $z einfüge, dann hat die Funktion einen Wert, den ich einer Variablen zuweisen kann ($result = rechne(8,34)).

Das Buch, das du da hattest, war das von php oder von einer anderen Programmiersprache? Das da nix eingefügt werden muss hat wohl den Grund, dass in php der Typ einer Variablen nicht definiert werden muss. In Java beispielsweise muss man den Typ einer funktion mit angeben, etwa "int function rechne(..." oder "void function rechne(.." Hierbei muss int einen Integer Wert zurückliefern, void (als einziger Typ) jedoch muss keinen Wert zurückliefern, man kann die Funktion aber mit einem einfachen return; vorzeitig beenden. In Turbo Pascal würdem diese void Funktion einer Procedure entsprechen. Da php aber wie schon gesagt keine solchen Unterscheidungen verlangt, brauch man das nicht, wenn man nicht wirklich einen Wert zurückgeben will.

Einziges Argument dafür: Es ist "sauberer geschrieben", wird aber auch bei den wenigsten Programmierkonventionen verlangt, maximal empfohlen.

Also kurz: Return kann man weglassen, wenn man es nicht braucht, mit return kann man etwas, dass eine Funktion errechnet hat an das Hauptprogramm zurückgeben.

sixfriends
10-11-2003, 22:21
Fast vergessen: Statt "<?" solltest du "<?php" benutzen, ist auf jeden Fall konformer, das andere läuft eventuell auf einigen Webservern nicht.

Und wenn du nochmal Code schreibst, dann bitte vornedran ein "[ PHP]" (ohne das Leerzeichen) und hintendran ein "[/PHP]". Liest sich dann besser.:D

cya - sixfriends

Mr.Nobody
12-11-2003, 19:55
Hallo,

danke f?r die ausf?hrliche Antwort, ich glaube langsam kann ich mir vorstellen, was das
return $z; bewirken soll. Ich vermute jetzt, ohne das return $z kann diese Variable nicht
an die Variable $result weitergegeben werden.
Ich habe mich auch immer gefragt, ob es auch einen deutschen Begriff f?r return gibt.
Aber ich hoffe ich habs richtig verstanden. In meinem php-Buch steht immer was von
R?ckgabe.

mfG
N.