Home  PHP Projekte  PHP Schulung  Informationsquellen  Geschichte  Core PHP  Einbindung in HTML  Kommentare  Variablen  Konstanten  Operatoren  Funktionen  Fortsetzung  Kontrollstrukturen  Arrays  Objektorientierung  Fortgeschrittenes PHP  Templates  Cache-Technologien  OOH Forms  Technik der Site  Büchertipps  Fotografie  Airbrush  Kontakt  Stuff 
|
Fortsetzung Funktionen
Funktionen können rekursiv aufgerufen werden.
Die erlaubte Rekursionstiefe ist hoch, aber durch
die Stackgröße begrenzt.
| Rekursion |
Top |
|
<?php
// Rekursion ist erlaubt
function magic($string) {
$c = $string[0];
$string = substr($string, 1);
if ('' != $string)
magic($string);
print $c;
}
$string = 'Was mag wohl passieren mit: ';
for ($i = 0; $i < 26; ++$i)
$string.= chr(65 + $i);
magic($string);
?>
|
|
Ausgabe
|
Top |
ZYXWVUTSRQPONMLKJIHGFEDCBA :tim nereissap lhow gam saW |
|
|
Argumente werden immer "per value" übergeben, sie können jedoch
auch als Referenz übergeben werden, wenn dem Argumentnamen
ein "&" vorangestellt wurde. Die Übergabe per Referenz empfiehlt sich
aus Geschwingkeitsgründen v.a. bei Objekten.
Funktionen können Referenzen auf Variablen zurückliefern. Das Feature
ist derzeit umstritten und deshalb nicht dargestellt, es bleibt der
Verweis auf das Manual.
Ebenfalls nicht behandelt wird das nicht mehr benötigte PHP 2 Relikt
old_function.
| pass by reference |
Top |
|
<?php
function noChange($value) {
$value = 10;
}
// &$arg
function change(&$value) {
$value = 10;
}
$value = 1;
noChange($value);
print "$value = $value\n";
change($value);
print "$value = $value\n\n";
// eingebaute Funktion mit pass by reference
$errno = 0;
$error_msg = "";
$handle = fsockopen("www.php.net", 80, &$errno, &$error_msg);
if (!$handle) {
print "Fehler: '$error_msg' ($errno)\n\n";
} else {
fputs($handle, "HEAD / HTTP/1.0\n\n");
while (!feof($handle))
print fgets($handle, 128);
}
?>
|
|
Ausgabe
|
Top |
$value = 1
$value = 10
HTTP/1.1 200 OK
Date: Fri, 18 May 2012 22:08:49 GMT
Server: Apache/1.3.41 (Unix) PHP/5.2.17
X-Powered-By: PHP/5.2.17
Content-language: en
Set-Cookie: COUNTRY=DEU%2C212.227.109.19; expires=Fri, 25-May-2012 22:08:50 GMT; path=/; domain=.php.net
Last-Modified: Sat, 19 May 2012 01:00:11 GMT
Connection: close
Content-Type: text/html;charset=utf-8
|
|
|
Das Keyword "static" dient zur Deklaration von lokalen Funktionsvariablen,
die zwischen Funktionsaufrufen ihren Wert behalten.
| static |
Top |
|
<?php
// static - Bewahrung des Wertes zwischen Funktionsaufrufen
function countHits() {
static $hits = 0;
if (0 == $hits)
print "$hits wird initialisiert\n";
printf('$hits = %03d%s', ++$hits, "\n");
}
countHits();
countHits();
?>
|
|
Ausgabe
|
Top |
$hits wird initialisiert
$hits = 001
$hits = 002
|
|
|
So wie es "variable variables" gibt, gibt es auch "variable functions".
Variable Functions sind zwar ein konfortabler Weg zur dynamischen Erweiterung
von Code, aber fehlerträchtig. Variable Functions sollten
stets mit function_exists()/
method_exists() kombiniert werden.
call_user_func()/
call_user_method()
kann die Übersichtlichkeit verbessern.
| variable functions |
Top |
|
<?php
// variable functions
function printMessage($msg) {
print "Message: '$msg'\n";
}
$name = "printMessage";
if (function_exists($name))
$name("Hello World!");
// mit Vorsicht zu genießen: eval()
eval($name . "('Hallo Welt!');");
?>
|
|
Ausgabe
|
Top |
Message: 'Hello World!'
Message: 'Hallo Welt!'
|
|
|
< ^ >
|