PHP Funktionen / eigene Funktionen I

 

 

Funktionen

Funktionen sind sozusagen Subprogramme (Subroutinen), die bestimmte (meist zu wiederholende) Aufgaben erfüllen.

Man kann sich diese als "kleinere eigenständige Programme" im Hauptprogramm vorstellen, die ebenso
dem EVA (Eingabe=Parameter, Verarbeitung=Befehlsfolgen, Ausgabe=zB der Return Wert der Funktion) Prinzip folgen können.

Es gibt grundsätzlich zwei Arten von Funktionen, die die man selber schreibt und jene die in PHP schon vorhanden sind.

Aufgerufen werden Funktionen über Ihren Funktionsnamen gefolgt von runden Klammern,
die ev. Parameter (Argumente) enthalten (Parameterübergabe), die der Funktion übergeben werden:

meineFunktion();
// Nur der Funktionsaufruf über den Funktionsnamen.
// Die Funktion hat keinen Rückgabewert und keine Übergabe-Parameter

meineFunktion($myparameter1$myparameter2); 
// Eine Funktion die mit 2 Parameter aufgerufen wird.
// Übergabeparameter werden durch Beistirche "," getrennt

$Rueckgabe meineFunktion($myparameter1);
// Eine Funktion, die mit 1 Parameter
// aufgerufen wird und auch einen Wert zurückgibt (return value)

 

Funktionen könnte man sich als eine "Blackbox" vorstellen:
Es werden also beim Funktionsaufruf meist Werte “hineingeschickt” (durch die Parameterübergabe),
dann in der Funktion verarbeitet und später eventuell wieder “ausgespuckt” als der "Return-Wert",
also der Rückgabewert, den die Funktion liefert:

 

$myReturnValue = my_black_box_function ( $myparameter1, $myparameter2 );

 

Funktionen werden hauptsächlich verwendet und sich wiederkehrende “Aufgaben” zu ersparen. Jedes Mal wenn die gleiche Aufgabe erledigt werden soll, kann man die dafür vorgesehene Funktion aufrufen.

Eigene Funktionen müssen definiert werden und können dann bei Bedarf aufgerufen werden.
Also erst wenn der Funktionsaufruf in einem Skript erfolgt, wird die Funktion aufgerufen und
ihr Funktionscode abgearbeitet. Wird die Funktion nie aufgerufen, ist sie meist fehl
am Platz im jeweiligen Skript.


Es gibt in PHP natürlich schon eine (wirklich große) Menge an vorgefertigten
Funktionen/Methoden, wie zB die Sinus-Funktion: sin();

http://at.php.net/manual/en/function.sin.php

im Handbuch heißt es dazu:

"float sin ( float arg)
sin() returns the sine of the arg parameter. The arg parameter is in radians"

D.h. nun, die Funktion sin liefert einen Gleitkommawert zurück (float ist ja der
Datentyp für Gleitkommazahlen) und erwartet auch einen solchen als Übergabe-Parameter (Argument) .

zB.

$sin_rad sin(6.4);

in $sin_rad befindet sich der Rückgabewert der Funktion mit dem Name "sin();",
der der Parameter in Form der Gleitkommazahl 6.4 übergeben wurde.
Die Funktion berechnet den Wert und liefert das Ergebnis wie gesagt
über den Zuweisungsoperator = an die Variable $sin_rad zurück.

 

 

Eigene Funktionen

Wir wollen die schon eingebaute PHP Funktion abs(); nachbilden.

Die Definition von php.net: http://at.php.net/abs

"Description: number abs ( number )
Returns the absolute value of number."

Der Absolut-Betrag bedeutet dabei mathematisch, dass immer ein positiver Wert
oder 0 zurückgegeben wird: (absolute Wert von |-a| = a)

zB.

$positiver_wert abs(-1); //$positiver_wert wäre dann 1
$positiver_wert abs(-3.14159); //$positiver_wert wäre dann 3.14159
$wert           abs(0); // $wert wäre dann 0

Wir wollen diese Funktion jetzt selbst nachbilden:

Funktionsdefinitionen sehen im Allgemeinen folgend aus: Vor dem Funktionsnamen steht der Begriff function,
damit PHP weiß, dass es eine Funktion ist. Danach schreibt man den Funktionsnamen
(für ihn gelten die gleichen Regeln wie für Variablennamen). Nun folgt eine geöffnete runde Klammer (,
dann eventuell Parameter, wenn Werte an die Funktion übergeben werden sollen und am Ende
eine geschlossenen Runde Klammer ). Darauf folgt der Funktionsblock, der durch { und } begrenzt ist:

function derFunktionsname ( eventuell Argumente, die an die Funktion übergeben werden )
{ // Hier stehen die Anweisungen der Funktion.

return ( Rückgabewert );
// Funktionen müssen keinen Rückgabewert haben, dann lässt man das
// "return"-Statement einfach weg.
}

 

Zurück zum Beispiel: Wir wollen also die abs() Funktion nachbilden. Wir brauchen nun einen eigenen Funktionsnamen, da Namen, die gleichlautende Funktionsbezeichnungen wie die on PHP eingebauten Funktionsnamen besitzen nicht verwendet werden können: Wir nennen die Funktion einfach mein_abs und definieren den leeren „Funktionskörper“:

function mein_abs()
{
}

Diese Funktion macht noch gar nichts – aber sie ist definiert. Damit die Funktion weiß, mit welchen Daten sie zu arbeiten hat, müssen wir ihr die Daten übergeben, d.h., wir brauchen einen Übergabeparameter. Wir wollen die Funktion ja mit mein_abs (-1) zB aufrufen. Damit der Wert -1 in der Funktion “landet”, müssen wir ihr auch als Parameter (Parameterübergabe) angeben:


function mein_abs($derWert)
{
}
main_abs(-1); // Aufruf der obigen Funktion mit dem Parameter -1

 

Wird nun mein_abs (-1); aufgerufen, steht der Wert -1 der Funktion als Variable "$derWert" im Funktionsblock zur Verfügung. Wir speichern die Datei unter mein_abs1.php und testen sie am Webserver und rufen sie über den Webbroswer auf:

http://meinwebserver/mein_abs1.php

Man sieht, es kommt keine Fehlermeldung, aber es geschieht auch nicht wirklich etwas, außer, dass die Funktion aufgerufen wird und ihr der Wert -1 übergeben wurde - was fehlt ist die Ausgabe.

 

Wir testen nun, ob die Parameterübergabe funktioniert hat.
Das machen wir, indem der Parameter einfach wieder mit echo-Befehl
innerhalb der Funktion ausgeben wird.
Folgene Funktion hat immer noch keinen Rückgabewert (return value), liefert aber zwischenzeitlich
ein visuelles feedback durch die Ausgabe.

 

Dazu ändern wir die Funktion wie folgt:

function mein_abs($derWert)
{
    echo 
$derWert;
}
main_abs(-1); // Funktionsaufruf


So folgt. Es wird "-1" im Browserfenster beim Aufruf der PHP-Datei angezeigt.

Die Parameterübergabe scheint also zu funktionieren. Wir wollen aber immer einen positiven Wert erhalten, d.h. zB -1 sollte 1 werden, -500 soll 500 werden etc. Wir müssen alle Möglichkeiten ausloten, die es zu berücksichtigen gibt ("Fallunterscheidungen"):


Ist der übergebene Wert 0 oder größer als 0, also somit nicht negativ, brauchen wir eigentlich gar nichts zu tun. Ist er kleiner als 0 also negativ, müssen wir ihn in einen positiven Wert wandeln. Das bedeutet, wir brauchen eine Abfrage, ob der Wert kleiner 0 ist, und müssen den Wert dann, falls dies der Fall ist „positiv machen“, sprich einfach mit -1 multiplizieren.

Wir testen also mit if ($derWert 0) ob der Wert negativ ist. Ist dies der Fall, brauchen wir den Wert nur mit -1 zu multiplizieren$derWert $derWert * -1; und erhalten so den positiven Wert, den wir gleich der Variablen $derWert zuweisen.

Anmerkung: $derWert $derWert * -1; kann auch als $derWert *= -1; geschrieben werden.

function mein_abs($derWert)

{
    if (
$derWert 0) {
        
$derWert $derWert * -1// eine negative Zahl mit -1 multipliziert
        // ergibt ja eine Positive: -1 * -1 = 1
        // -3.4 * -1 = 3.4 etc.
    
}
    echo 
$derWert// Ausgabe
    
echo "
"
// Zeilenumbruch
}


Wir Testen dies jetzt mit verschiedenen Parametern beim Funktionsaufruf:
mein_abs(-3.14159);
mein_abs(0);
mein_abs(22);
mein_abs(-10000000000000000);

Prorgrammausagebe:
3.14159
0
22
1E+16

Da wir die positiv ausgegebenen Werte im weiteren Programmablauf verwenden wollen und nicht als Text im "Browserfenster" anzeigen möchten, müssen wir den positiven Wert, den die Funktion "errechnet" hat statt Ausgeben einfach zurückgeben. Dies geschieht wie schon kurz erwähnt über den "return"-Befehl in Funktionen:

return ($derWert);

So folgt:

function mein_abs($derWert)
{
    if (
$derWert 0) {
        
$derWert $derWert * -1// eine negative Zahl mit -1 multipliziert
        // ergibt ja eine Positive: -1 * -1 = 1
        // -3.4 * -1 = 3.4 etc.
    
}
    return (
$derWert); // gibt den Wert an den “Aufrufer” der Funktion
    // zurück
}

$positiver_Wert1 mein_abs(-3.14159);
$positiver_Wert2 mein_abs(-1);
$positiver_Wert3 mein_abs(11);
echo 
$positiver_Wert1;
echo 
"
"
;
echo 
$positiver_Wert2;
echo 
"
"
;
echo 
$positiver_Wert3;

Programmausgabe:

3.14159
1
11


Wir haben also nun unsere eigene Funktion fzur Errechnung des Absolutbetrages geschrieben. Die Berechnung wird von der Funktion per return zurückgegeben und per = an beliebige Variablen weitergegeben.

Die Variablen haben wir hier noch zur Überprüfung per "echo"-Statement zur Anzeige gebracht.


 

 

Ergänzende und vertiefende Module