Werbung einblenden Werbung ausblenden


Home / Tutorials / PHP Handbuch / Funktionen


Funktionen PHP
Übergabe von Parametern
Einer Funktion können auch komplexere Strukturen übergeben werden, zum Beispiel ganze Arrays
Gültigkeit von Variablen

Funktionen PHP

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.

Übergabe von Parametern



<?
$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
................................................

Gültigkeit von Variablen

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

vorhergehendes Kapitel