|

Funktionen PHP
Übergabe von Parametern
Einer Funktion können auch komplexere Strukturen
übergeben werden, zum Beispiel ganze Arrays
Gültigkeit von Variablen
Es kommt recht häufig vor, besonders bei
größeren Projekten, dass sich Code wiederholt.
Die einfachste, aber nicht beste Methode, ist in diesem Fall
via copy and paste den Code zu kopieren. Diese Methode kann
ein Programm enorm aufschwemmen, weil x Mal dasselbe dasteht.
Ein weiterer Nachteil ist, dass Code entsteht, der schwer
zu pflegen ist. Ist ein Fehler in diesem Bereich, muss er
x Mal korrigiert werden. Speziell in PHP steckt in solchen
Bereichen sehr oft HTML. Will man nun das Design ändern,
muss man es überall ändern. Weiter erschwert es
die Wiederverwendbarkeit von Code. All dies ändert aber
nichts an der Tatsache, dass die Methode copy and paste in
der Regel einfacher ist und das Schreiben einer Funktion mehr
Nachdenken erfordert. Dem ist so, weil sich in der Regel Routinen
zwar wiederholen, aber doch nie 100 % gleich sind. Das heisst,
dass bei jeder Funktion nochmal via Parameterübergabe
eine Feinjustierung vorgenommen werden muss. Unter Umständen
lässt sich auch das oft verhindern, wenn das Programm
sehr sauber geplant wird, was aber wiederum ein längeres
Nachdenken erfordert. Anhand eines simplen Beispieles, läßt
sich am schnellsten erklären, um was es geht.
<?
print "Hallo, wie geht es Dir ?<br>";
print "Hallo, wie geht es Dir ?<br>";
print "Hallo, wie geht es Dir ?<br>";
?>
Dazu ist erstmal nicht viel zu sagen.
Dieser Skript setzt dreimal "Hallo, wie geht es Dir ?"
auf den Monitor. Mit einer Funktion ließe sich das verkürzen.
<?
function hello()
{
print "Hallo, wie geht es Dir ?<br>";
}
hello();
hello();
hello();
?>
Dieser Skript macht dann das gleiche,
wie das Beispiel oben. Er druckt dreimal "Hallo, wie
geht es Dir ?" auf den Schirm. In der Regel nützt
eine Funktion aber nichts, wenn man keine Parameter übergen
kann. Will man z.B. unterschiedliche Leute begrüssen,
muss man Parameter übergeben.
<?
$namen=array("Andrés Ehmann","Jaime
Gutierrez","Julio Iglesias","Rory Gallagher");
foreach ($namen as $name)
{
hello($name);
}
function hello($a)
{
print "Hallo $a, wie geht es Dir ?<br>";
}
?>
Einer
Funktion können auch komplexere Strukturen übergeben
werden,
zum Beispiel ganze Arrays |
|
<?
$superarray=array(
array("Andrés Ehmann","Hallandstrasse
2","13189 Berlin/Deutschland"),
array("Jaime Gutierrez","Avenida de las Americas
55","POB 343 St.Cruz de la Sierra/Bolivien"),
array("Hans Maier","Im Binsengrün 44","7800
Freiburg im Breisgau/Deutschland"));
foreach ($superarray as $mein_array)
{
hello($mein_array);
}
function hello($a)
{
print "Name: $a[0]<br>";
print "Strasse: $a[1]<br>";
print "Ort: $a[2]<br>";
}
?>
Wenn man diesen Skript auslöst,
erscheint das auf den Schirm.
Name: Andrés Ehmann
Strasse: Hallandstrasse 2
Ort: 13189 Berlin/Deutschland
Name: Jaime Gutierrez
Strasse: Avenida de las Americas 55
Ort: POB 343 St.Cruz de la Sierra/Bolivien
Name: Hans Maier
Strasse: Im Binsengrün 44
Ort: 7800 Freiburg im Breisgau/Deutschland
Im Gegensatz zu Perl, wo mehrere Array
nicht ohne weiteres an eine Funktion übergeben werden
können (man verwendet dann Referenzen) ist dies in PHP
möglich. Eine Diskussion, ob der Perl Ansatz nicht in
letzter Konsequenz leistungsfähiger ist, soll hier nicht
geführt werden. Im folgenden Skript werden zwei Array
als Parameter übergen.
<?
$superarray=array(
array("Andrés Ehmann","Hallandstrasse
2","13189 Berlin/Deutschland"),
array("Jaime Gutierrez","Avenida de las Americas
55","POB 343 St.Cruz de la Sierra/Bolivien"),
array("Marcello Mastroianni","strada della
canzione 5","4566 Roma/Italia"));
$landarray=array("Deutschland"=>"Berlin",
"Bolivien"=>"La Paz","Italien"=>"Rom");
foreach ($superarray as $mein_array)
{
hello($mein_array,$landarray);
$i++;
}
function hello($a,$b)
{
print "Name: $a[0]<br>";
print "Strasse: $a[1]<br>";
print "Ort: $a[2]<br>";
print "................................................<br>";
while (list($schluessel,$wert)=each($b))
{
print "Die Hauptstadt von $schluessel ist $wert<br>";
}
print "................................................<br>";
}
?>
Auf dem Schirm erscheint dann sowas.
Name: Andrés Ehmann
Strasse: Hallandstrasse 2
Ort: 13189 Berlin/Deutschland
................................................
Die Hauptstadt von Deutschland ist Berlin
Die Hauptstadt von Bolivien ist La Paz
Die Hauptstadt von Italien ist Rom
................................................
Name: Jaime Gutierrez
Strasse: Avenida de las Americas 55
Ort: POB 343 St.Cruz de la Sierra/Bolivien
................................................
Die Hauptstadt von Deutschland ist Berlin
Die Hauptstadt von Bolivien ist La Paz
Die Hauptstadt von Italien ist Rom
................................................
Name: Marcello Mastroianni
Strasse: strada della canzione 5
Ort: 4566 Roma/Italia
................................................
Die Hauptstadt von Deutschland ist Berlin
Die Hauptstadt von Bolivien ist La Paz
Die Hauptstadt von Italien ist Rom
................................................
Eine Variable, die innerhalb einer Funktion
steht, ist nur innerhalb dieser Funktion gültig. Das
heisst, eine Variable gleichen Namens im Hauptprgramm hat
mit der Variablen in der Funktion nichts zu tun.
<?
$summe=50;
function summe($a,$b)
{
$summe=$a+$b;
print "Die Summe aus der Subroutine ist $summe <br>";
}
summe(50,70);
print "Die Summe im Hauptprogramm ist $summe <br>";
?>
Das Ergebnis dieses Skriptes sieht so
aus.
Die Summe aus der Subroutine
ist 120
Die Summe im Hauptprogramm ist 50
Wenn man das nicht will, wenn man also will,
dass eine Variable einer Funktion im ganzen Bereich des Programms
gültig ist, dann muss man diese Variable innerhalb der
Funktion mit global exportieren. Das sieht dann so aus.
<?
$summe=50;
function summe($a,$b)
{
global $summe;
$summe=$a+$b;
print "Die Summe aus der Subroutine ist $summe <br>";
}
summe(50,70);
print "Die Summe im Hauptprogramm ist $summe <br>";
?>
Das Ergebnis dieses Skriptes
sieht dann so aus.
Die Summe aus der Subroutine ist
120
Die Summe im Hauptprogramm ist 120
|
 |