Anzeige
Tutorialbeschreibung

Funktionen

Funktionen

Funktionen in PHP sind zu oft vernachlässigte und gefürchtete Kapitel beim Programmieren, dabei sind sie einfach zu begreifen und echte Helfer (bei richtigem Einsatz) zugunsten der Performance! Aber dazu gleich im Einzelnen.


Wozu dienen Funktionen?

Sie sind kleine Programme (das ist fast zu viel gesagt) bzw. Programmteile, die unter einem Namen zusammengefasst werden und nur mit Aufruf dieses Namens vollständig (zumeist in einer anderen Datei) verfügbar gemacht werden können (Vorteil: Öfter gebrauchte Code-Snippets können so inkludiert werden, dass die Funktionen erst z. B.: ‚angesprochen’ werden, wenn man sie benötigt). Das ist sicher nicht die ‚offizielle’ Definition von Funktionen, aber (so meine ich) eine brauchbare und anschauliche Darstellung, mit der man arbeiten kann, wie wir gleich sehen werden. 

Wie sieht nun eine Funktion in der Praxis aus?

<?

function psdtut()

                        {

                         //hier kann jeder Code stehen, den wir öfter benötigen

                         }

?>

Damit das Ganze auch wirklich ausprobiert werden kann, machen wir jetzt ein Beispiel, das Sie sofort (Ihr Server sollte SMTP–Server sein, weil eine Email versendet wird) benutzen können:

Diese Datei nennen wir func.php:

<?

function psdtut()

                        {

                         $email='ihremail@adresse.de';

                          $to=$email;

                          $subject="Testbetreff";

                          $message="Das müsste imnnnbodynstehennnn4-zeilig!";

                          $header="From: Webmaster!";

                          mail($to, $subject, $message,$header);

                          echo 'Mail versendet!';

    }

function testfunc()

{

echo ’Jetzt kommt nur das ECHO’;

}

  ?>

So, jetzt wirds interessant, die folgende Datei nennen wir func1.php

<?

include ’func.php’;

psdtut()

?>


Wenn wir jetzt func1.php im Browser aufrufen, wird die Email abgefertigt, NICHT das echo aus func.php gezeigt … umgekehrt, wenn func1.php so aussieht …

<?

include ’func.php’;

testfunc()

?>

… wird die Email NICHT abgefertigt, dafür zeigt func1.php das echo aus func.php.
Das ist alles und das ist nicht wenig, wenn man bedenkt, dass man oft Datenbankabfragen im Code wiederholt, obwohl einmal eine Funktion geschrieben, die dann öfter (nach include der Funktionen-Seite) benutzt werden kann. 
Nachteil von Funktionen: Sie können nachträglich nicht variiert werden. Es können also keine Variablen (im Nachhinein) zur Verfügung gestellt werden. Eine Funktion schottet sich durch die { … } völlig ab! 
D.h.: Wenn also die func.php $email nicht innerhalb der {} Klammern hätte, sondern $email erst in der func1.php zur Verfügung gestellt werden würde, würde diese Variable (wie man zunächst glauben könnte) nicht in die Funktion Eingang finden. 

Mit dem Befehl ’global’ könnte man allerdings eine (auch mehrere) Variable an von func1.php nach func.php übergeben, sofern der Variablenname in func.php innerhalb der {} folgendermaßen angegeben wird {global $var1, $var2, $var3;}

Wie würde das jetzt anhand unserer obigen Beispiele aussehen?
Zunächst unsere veränderte func.php:

<? global $email; //mehrere Variablen würden mit Komma zu trennen sein.

function psdtut()

                        {

                         $email=$email;

                          $to=$email;

                          $subject="Testbetreff";

                          $message="Das müsste imnnnbodynstehennnn4-zeilig!";

                          $header="From: Webmaster!";

                          mail($to, $subject, $message,$header);

                          echo 'Mail versendet!';

    }

function testfunc()

{

echo ’Jetzt kommt nur das ECHO’;

}

  ?>

Jetzt die func1.php:

<? $email=$_POST[’email’]; /*diese Definition wäre zwar nicht unbedingt notwendig, wenn die Variable per POST übergeben wurde, veranschaulicht aber die Herkünft der Variable*/

include ’func.php’;

psdtut()

?>

Jetzt werden PHP–Programmierer meinen, was hat er denn bisher geschrieben, das waren ja keine FUNKTIONEN, sondern PROZEDUREN.
Das ist richtig, zumal eine Funktion (per Definition) eine Prozedur samt einer so genannten return-Anweisung ist. Eine Prozedur hat im Gegensatz zur Funktion keinen Rückgabewert! Natürlich ist das von der Art der jeweiligen Funktion (Prozedur) abhängig, ob ich ihr eine return-Anweisung mitgebe oder nicht. In unserem Beispiel oben ist das eher nicht erforderlich, aber in vielen Fällen ist das durchaus sinnvoll, wenn man mit dem Funktionswert ’weiterarbeiten’ will, das leistet eine Prozedur nicht. Wie immer wird das Gesagte sofort anschaulich, wenn wir ein Beispiel machen: Diesfalls denke ich, wäre dazu am besten die date-Funktion geeignet:

Zunächst die PROZEDUR:

<?function Uhrzeit()
 {
     echo date( 'H:i:s' );
 }
 

 Uhrzeit();?>

Hier kann also nur das echo der Uhrzeit mit unserer Funktion ausgegeben werden. Mehr leistet die Prozedur nicht!

Oft benötigt man aber (gerade die Uhrzeit) im weiteren Programm die Funktion und will (im Programm) damit weiterarbeiten, dann ist eine Prozedur zu wenig. Eine Prozedur + return-Anweisung = (echte) Funktion muss her!
Wie sieht die nun in unserem Beispielfall aus?

<?function Uhrzeit()
2 {
3     return date( 'H:i:s' );
4 }?>
5 
6 $uhrzeit = Uhrzeit();

… und schon könnte ich die Funktion (mit der return-Anweisung) als Variable z. B. in anderem Sheet (hier im selben) weiterverwenden; ich müsste also nicht immer die function neuerlich aufrufen, sondern arbeite immer nur (diesfalls) mit $uhrzeit.


Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von artesmaracay
  • 19.11.2010 - 14:48

Vielen Dank, fuer mich als ersten Eindruck war es schonmal ganz anschaulich.

Portrait von Mainclain
  • 30.09.2009 - 11:48

Alles gut beschrieben, wäre für mich interessanter, wenn dort auch noch ein wenig auf Klassen eingegangen wäre, doch so ist es für Anfänger sicher einfach zu verstehen, als alels auf einmal.

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 18.12.2008 - 19:11

Etwas hackelig und das mit der Zeit Funktion kommt meiner Meinung nach auch etwas zu kurz.

Portrait von Kampfrolli
  • 19.02.2008 - 13:38

Kurz und bündig gehalten so mag ich da, ist besser als wenn man gross um den heissen Brei redet und dann sowieso nichts verstanden hat. Danke

Portrait von mobi
  • 10.04.2007 - 07:32

gut und verständlich erklärt für Anfänger. Für leute wo schon mit PHp arbeitem ist es zu simpel und nichts neues. ABer Loben muß man dich trotzdem :)

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 07.02.2007 - 19:58

Guter Einstieg zu den Functionen, merci.

Jetzt muss ich nur noch überlegen wie und wo ich das für mich einsetzen kann.

x
×
×