Funktion
Aus php bar
Inhaltsverzeichnis |
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
1 function Uhrzeit(&$uhrzeit) 2 { 3 $uhrzeit = date( 'H:i:s' ); // WICHTIG: $uhrzeit hier muss dem &$uhrzeit namen entsprechen! 4 } 5 6 7 Uhrzeit($uhrzeit); 8 echo $uhrzeit 9 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.
1 function Zaehle( &$zahl ) 2 { 3 $zahl++; 4 } 5 6 $zahl = 0; 7 echo $zahl; 8 Zaehle( $zahl ); 9 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
- der Funktion als Parameter übergeben wurden
- innerhalb der Funktion definiert wurden
- mit dem Schlüsselwort (keyword) global referenziert wurden
- oder Superglobal sind.
1 // normale Variable 2 $var_a = 'ausserhalb definiert'; 3 $var_b = 'ausserhalb definiert'; 4 $var_c = 'ausserhalb definiert'; 5 6 // superglobale Variable 7 $_SESSION['meine_variable'] = 'superglobale Variable'; 8 9 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
1 function staticTest() 2 { 3 static $static_var = 0; 4 $static_var++; 5 echo $static_var; 6 } 7 8 staticTest(); 9 staticTest(); 10 staticTest();
1 2 3
Siehe auch

