Querdenkender Webworker mit WordPress-Affinität

Funktionen und Referenzen als Parameter? Nein, danke.

Ich hab mich ja schon oft genug über die „Automagie“ von vielen Builtin-Funktionen von PHP geärgert und ausgelassen. Zu einem nicht unwesentlichen Teil sind dafür auch Referenzen verantwortlich. Dieselbigen haben durchaus ihre Berechtigung; das will ich garnicht abstreiten. Aber in einigen Fällen kann man nicht nur getrost auf sie verzichten, sondern man muss sie auch als potentielle Fehlerquelle ansehen.

Funktionen werden im Allgemeinen als etwas betrachtet, das immer-wieder-kehrende Logik in sich gekapselt vereint. Dabei folgt man im Allgemeinen dem Prinzip des DRY (Don’t repeat yourself). Oft wird bei der erfolgreichen Übergabe von einem bzw. mehreren Parametern oder dem Eintreten eines bestimmten Ereignisses Logik innerhalb der Funktion ausgeführt, die man sonst mit all ihren Anweisungen immer wieder schreiben müsste, und es werden Ergebnisse zurückgeliefert. In sich geschlossene Logik, die wie eine Funktion aussieht, aber nichts zurückliefert, wird deshalb oft zur Unterscheidung als Prozedur bezeichnet.

Wenn man Referenzen an Funktionen übergibt, arbeiten diese direkt auf dem Original. Meiner Meinung nach ist das wirklich übel! Genausogut bzw. überweise kann man darauf verzichten, und die Variable in der Funktion global verfügbar machen:

[code lang=“php“]
function retVar1 ($var) {
return $var += 1;
}
[/code]

Die Funktion retVal1 () ist ein einfaches aber anschauliches Beispiel einer normalen Funktion. Sie erwartet implizit einen Wert als Parameter, mit dem die Rechenoperation + 1 möglich ist und liefert den neuen Wert zurück, den man dann in einer Variablen entgegennehmen kann.

[code lang=“php“]
$var = 1;

// niemand wird eine Aenderung erwarten
retvar1 ($var);
echo $var;

// die Variable wird um 1 hochgezaehlt
$var = retVar1 ($var);
echo $var;

// PHP5 gibt eine Warnung aus, aendert
// aber trotzdem die Variable
retVar1 (&$var);
echo $var;
[/code]

Falls ich eine Referenz an die Funktion retVar1() übergebe, wird sogar PHP5 meiner Forderung nachkommen. Allerdings werde ich auch mit einer Warnung darauf hingewiesen, dass dies nicht mehr lange funktionieren wird. Aber die wirklichen Un-Beispiele, die leider auch in Varianten in freier Wildbahn anzutreffen sind, sind die folgenden Exemplare – inklusive der der global-Variante:

[code lang=“php“]
function retVar2 () {
global $var;
return $var += 1;
}

function retVar3 (&$var) {
return $var += 1;
}

function retVar4 (&$var) {
if (is_numeric ($var)) {
$var += 1;
return TRUE;
}
return FALSE;
}

$var = 1;

// Wenn schon wirklich schlecht, dann
// kann man es auch gleich so machen …
retVar2 ();
echo $var;

retvar3 ($var);
echo $var;

$var = retvar3 ($var);
echo $var;

retvar4 ($var);
echo $var;

$var = retvar4 ($var);
echo $var;
[/code]

Während retVar3() noch die harmlose Variante darstellt, dürfte retVar4() wahrscheinlich als Krönung des Programmierens in die Abfallhaufen der Geschichte eingehen.

Have fun!

Das könnte Dich auch interessieren:

Deine Meinung ist uns wichtig

*