Funktion

Aus php bar
(Weitergeleitet von function)
Wechseln zu: Navigation, Suche

Definition

Eine Funktion (engl. subroutine, function) oder eine Prozedur (engl. procedure) sind Anweisungsblöcke (engl. subprogram oder statement block), bzw. eine in einem Block zusammengefasste Abfolge von Befehlen / Anweisungen als Teil eines Programmes.

Funktionen und Prozeduren werden einmal definiert und können dann von überall aus aufgerufen werden.

siehe auch: Wikipedia:Funktion

Prozedur

Eine Prozedur hat im Gegensatz zur Funktion keinen Rückgabewert. Die Ergebnisse können daher nicht weiterverarbeitet werden. Es fehlt somit die return Anweisung am Ende. Ansonsten unterscheiden sich Prozedur und Funktion nicht.

1 function Uhrzeit()
2 {
3     echo date( 'H:i:s' );
4 }
5 
6 Uhrzeit();


15:14:33

siehe auch: Wikipedia:Prozedur

Rückgabewerte

Funktionen geben ihre Ergebnisse immer mit der return Anweisung zurück. Daher können die Ergebnisse weiterverarbeitet werden.

1 function Uhrzeit()
2 {
3     return date( 'H:i:s' );
4 }
5 
6 $uhrzeit = Uhrzeit();
7 echo $uhrzeit;
8 // das selbe wie
9 echo Uhrzeit();


15:14:33
15:14:33

Rückgabe als Referenz

 function Uhrzeit(&$uhrzeit)
 {
      $uhrzeit = date( 'H:i:s' );  // WICHTIG: $uhrzeit hier muss dem &$uhrzeit namen entsprechen!
 }
  
 
 Uhrzeit($uhrzeit);
 echo $uhrzeit
 
10 //waere auch folgendes moeglich:
11 $uhrzeit = Uhrzeit($temp); //der name ausserhalb der funktion ist also beliebig waehlbar
12 echo $uhrzeit
ACHTUNG: Referenzen laufen langsam aus. Manche Provider stellen die Referenzmoeglichkeit
default auf NO ein. man sollte bestehende Referenz-Funktion aus Sicherheitsgruenden
langsam umstellen.

--Ifeelhorst 09:51, 10. Mai 2006 (CEST)

Parameter

Funktionen können mit Parametern aufgerufen werden, z. B.

1 function Uhrzeit( $time )
2 {
3     return date( 'H:i:s', $time );
4 }
5 
6 echo Uhrzeit( time() );
7 echo Uhrzeit( time() + 60 );


15:14:33
15:15:33

siehe auch: Wikipedia:Parameter

Standardwerte

Parameter einer Funktion können Standardwerte haben, ihre Angabe beim Funktionsaufruf ist dann optional.

1 function Uhrzeit( $time = 0 )
2 {
3     return date( 'H:i:s', $time );
4 }
5 
6 echo Uhrzeit();
7 echo Uhrzeit( time() );
8 echo Uhrzeit( time() + 60 );


00:00:00
15:14:33
15:15:33

Übergabe als Referenz

Bei der Übergabe von Parametern wird die übergebene Variable immer kopiert, das kostet Zeit und Speicher und die Funktion arbeitet mit dieser Kopie. Durch Verwendung eines '&' (kaufmännisches Und) übergibt man nicht den Inhalt der Variable (call by value) sondern eine Referenz auf die Variable (call by reference), dabei entfällt das Kopieren der Variable, was vor allem bei großen Arrays oder langen Zeichenketten von Vorteil sein kann.

1 function Uhrzeit( &$time )
2 {
3     return date( 'H:i:s', $time );
4 }
5 
6 $zeit = time();
7 echo Uhrzeit( $zeit );


15:14:33

Wenn man allerdings sicherstellen möchte, dass die Funktion die Ausgangsvariable nicht verändert, sollte man die Variable nicht per Referenz übergeben.

Man kann sich so auch die Rückgabe der Variable sparen, wenn die übergebene Variable geändert zurückgegeben werden soll.

 function Zaehle( &$zahl )
 {
     $zahl++;
 }
 
 $zahl = 0;
 echo $zahl;
 Zaehle( $zahl );
 echo $zahl;
10 Zaehle( $zahl );
11 echo $zahl;


0
1
2

Ab PHP 5 werden Objekte immer als Referenz übergeben.

siehe auch: Wikipedia:Parameterübergabe

Variablen

Innerhalb einer Funktion sind nur die Variablen bekannt die

 // normale Variable
 $var_a = 'ausserhalb definiert';
 $var_b = 'ausserhalb definiert';
 $var_c = 'ausserhalb definiert';
 
 // superglobale Variable
 $_SESSION['meine_variable'] = 'superglobale Variable';
 
 function testVariableScope( $parameter_variable )
10 {
11     // referenz auf externe Variable setzen
12     global $var_b;
13 
14     echo 'Parameter-Variable           : ' . $parameter_variable . "\n";
15     echo 'Superglobale-Variable        : ' . $_SESSION['meine_variable'] . "\n";
16     echo 'externe Variable             : ' . $var_a . "\n";
17     echo 'externe Variable mit global  : ' . $var_b . "\n";
18     echo 'externe Variable mit $GLOBAL : ' . $GLOBAL['var_c'] . "\n";
19 
20     // ueberschreiben der Variableninhalte
21     $var_a = 'durch Funktion ueberschrieben';
22     $var_b = 'durch Funktion ueberschrieben';
23     $var_c = 'durch Funktion ueberschrieben';
24 }
25 
26 testVariableScope( 'parameter' );
27 
28 echo 'Variable a ausserhalb: ' . $var_a . "\n";
29 echo 'Variable b ausserhalb: ' . $var_b . "\n";
30 echo 'Variable c ausserhalb: ' . $var_c . "\n";


Parameter-Variable           : parameter
Superglobale-Variable        : superglobale Variable
externe Variable             : Notice: undefined Variable
externe Variable mit global  : ausserhalb definiert
externe Variable mit $GLOBAL : ausserhalb definiert

Variable a ausserhalb: ausserhalb definiert
Variable b ausserhalb: durch Funktion ueberschrieben
Variable c ausserhalb: durch Funktion ueberschrieben

statische Variablen

 function staticTest()
 {
     static $static_var = 0;
     $static_var++;
     echo $static_var;
 }
 
 staticTest();
 staticTest();
10 staticTest();


1
2
3

Siehe auch