Einführung in PHP

Aus php bar
Wechseln zu: Navigation, Suche

Bei dieser Einführung setzen wir voraus, dass bereits ein lauffähiger Webserver samt PHP installiert und funktionsbereit ist. Ebenso habt ihr euch bereits für eine geeignete Entwicklungsumgebung entschieden und diese installiert.

Dateinamen

PHP-Scripte sollten immer mit der Endung .php versehen sein. Unabhängig davon, ob sie direkt aufgerufen oder durch andere Skripte eingebunden werden.

Hinweis: Einige Webserver akzeptieren aus Kompatibilitätsgründen auch andere Erweiterungen für PHP-Scripte wie z.B. php3, phtml, php4 u. ä.. Diese sollten aber nicht verwendet werden.

Für unser erstes Skript könnt ihr also einfach eine beliebige HTML-Datei umbenennen in .php, z.B. index.html nach index.php.

index.php:

<html>
<head><title>Hallo Welt!</title></head>
<body>
Hallo Welt!
</body>
</html>

PHP Code

PHP-Code wird immer zwischen die PHP-Tags geschrieben, egal ob die Datei nur PHP-Code enthält oder auch HTML-Code.

1 span class="st0">'Hallo Welt!'


Hinweis: Einige Webserver unterstützen auch andere optionale Schreibweisen für die PHP-Tags z.B. <? ?> und <% %>. Auch hier sollte auf die Verwendung verzichtet werden, da nur für die Schreibweise <?php ?> sichergestellt ist, dass diese auch auf allen Webservern, die PHP unterstützen, funktioniert.

Ausgabe

Um eine Ausgabe am Bildschirm bzw. im Browser-Fenster zu erzeugen stellt PHP mehrere Möglichkeiten zur Verfügung, die gängigsten sind echo, print (inklusive printf(), sprintf() und vprintf()) und print_r():

1 span class="st0">'Hallo Welt!''Hallo Welt!'


print_r() tut dies außerdem Rekursiv für alle Elemente der Variable, z. B. bei Arrays und Objekten. print_r() wird meist während der Entwicklung einer Anwendung verwendet um den Inhalt von Variablen (meist Arrays oder Objekte) zu überprüfen.


Hinweis: Zur Ausgabe eines Wertes wie z. B.: <?php echo 'Hallo!'; ?> gibt es auch eine kürzere Schreibweise: <?php='Hallo'?> bzw. <?='Hallo'?>, auf die aber ebenfalls verzichtet werden sollte, da auch hier nicht davon auszugehen ist, dass alle Webserver diese Schreibweisen unterstützen.

Variablen

Häufig kommt es auch vor das Werte mehr als einmal gebraucht werden, dann kann man diese in so genannten Variablen ablegen, mit Hilfe des Zuweisungs-Operators "=":

1 span class="co1">// Wir weisen der Variable $begruessung
2 // den Wert 'Hallo Welt!' zu:
3 $begruessung = 'Hallo Welt!'// Ausgabe: Hallo Welt
4 </body>
5 </html>


Die Variablen-Namen sollten eindeutig und verständlich sein, so das andere anhand des Namen schon Rückschlüsse auf die Verwendung und den Inhalt der Variable schließen können.

1 span class="co1">// schlechter Name:
2 'Hallo Welt!';
3 
4 // besserer Name:
5 $greetings = 'Hallo Welt!'


Es ist auch ratsam Namen in englisch zu verwenden, Englisch ist die Sprache die fast jeder Entwickler versteht, egal ob der Inhalt der Variable in einer anderen Sprache ist, dies erhöht die Chancen das andere den eigenen Code mitverwenden und somit auch mit daran arbeiten oder wenn man bei Fehlern seinen Code jemandem schickt oder in einem Forum ablegt.

Formatierte Ausgabe

ToDo: Dieser Artikel muss an dieser Stelle mit Folgendem ergänzt werden: printf, variablen

Bedingungen

Programme, so auch PHP-Scripts, sind auf Bedingungen angewiesen. Das heißt, eine oder mehrere Anweisungen werden nur dann ausgeführt, wenn eine definierte Bedingung erfüllt ist. Bedingungen werden durch das Schlüsselwort If (engl. falls) eingeleitet. Wenn der Vergleich in den Klammern true (wahr) ergibt, wird der Code in den geschwungenen Klammern ausgeführt.

1 span class="st0">'Hans';
2 // Weiterer Programmcode
3 'Hans''Der Wert von $name wurde nicht gendert.'

Es wäre natürlich aufwändig, wenn man jetzt für jede Möglichkeit einen eigenen If-Block schreiben müsste, aber hierfür gibt es die Schlüsselwörter else (sonst) und elseif.

1 span class="st0">'Hans';
2 // Weiterer Programmcode
3 $name = 'Dieter''Hans''Der Wert von $name wurde nicht gendert.''Dieter''Der Wert von $name wurde auf Dieter gesetzt.''$name wurde auf etwas ganz Anderes gesetzt, nmlich: '

Ein häufiger Fehler ist folgender Code:

1 span class="st0">'Gerhard''Hans''Der Wert von $name wurde nicht gendert.''Dieter''Der Wert von $name wurde auf Dieter gesetzt.''$name wurde auf etwas ganz Anderes gesetzt, nmlich: '

Dieser Code würde jetzt "Der Wert von $name wurde auf Dieter gesetzt." ausgeben. Warum? Mit dem = weist man einen Wert zu. Da eine Zuweisung immer true (alles OK) zurück gibt, wird diese Bedingung also ausgeführt. Um wirklich zu vergleichen, verwendet man den Operator == (ist gleich) oder === (ist identisch). Der Unterschied dieser beider Operatoren wird Ihnen später noch erläutert werden.

Der oben gezeigte Code geht auch kürzer. Wenn man nach einer If-, Elseif- oder Else-Bedingung nur eine Anweisung schreibt, kann man die geschwungenen Klammern weglassen. Der obige Code würde dann so aussehen:

1 span class="st0">'Gerhard''Hans''Der Wert von $name wurde nicht gendert.''Dieter''Der Wert von $name wurde auf Dieter gesetzt.''$name wurde auf etwas ganz Anderes gesetzt, nmlich: '

Natürlich sieht dieser Code nicht mehr so schön aus. Zu empfehlen ist auf jeden Fall die obige Variante.


Eine ähnliche Form der If-Konstruktionen ist der Trinitäts-Operator:

1 span class="st0">'Hans''Hans' ? 'Der Name ist Hans.' : 'Der Name ist ein anderer.'

Der Ausdruck vor dem ? wird ausgewertet und gibt true oder false zurück, je nachdem wird dann entweder der erste (vor dem Doppelpunkt) oder der zweite (nach dem Doppelpunkt) Ausdruck zurück gegeben.

Schleifen

do

Aufbau:

do
{
  anweisung
}
while (bedingung)

Beispiel einer Standard Anwendung:

1 


Ausgabe:

12345

Wie auch die while Schleife wird die do Schleife so lange durchlaufen bis der ihr übergebene Ausdruck false zurückliefert. Jedoch wird die Bedingung jeweils am Ende eines Durchlaufs überprüft, nicht wie bei while am Anfang. So durchläuft die Schleife auch mindestens einmal.

Auch eine do-Schleife kann per break vorzeitig verlassen werden:

1 


Diese Schleife wird also nur zwei mal durchlaufen.

while

Aufbau:

while (bedingung) anweisung

Beispiel einer Standard Anwendung:

1 


Selbes Beispiel in einer anderen Schreibweise:

1 


Die while Schleife wird solange durchlaufen wie der ihr übergebene Ausdruck Wahr ist, also true zurückliefert. Eine while Schleife kann auch vorzeitig mit dem Schlüsselwort break verlassen werden.

1 


for

Aufbau:

for (intialiserung; bedingung; anweisung) anweisungsblock

Beispiel einer Standard Anwendung:

1 

Ausgabe:

01234

Es können auch leere Parameter übergeben werden wie z. B.

1 

oder

1 


Ausgabe:

01234

Erklärung: Jeder Ausdruck der weggelassen wird, wird wie in PHP als true gewertet. Somit wird die Schleife solange durchlaufen bis diese mit dem Schlüsselwort break abgebrochen wird.

Arrays

Ein Array ist eine Liste oder Matrix von Daten. Ein Array in PHP kann die unterschiedlichsten Datentypen enthalten.

Verschiedene Bespiele zum Füllen eines Arrays:

1 span class="st0">'a', 'b', 'c');

1 span class="st0">'a''b''c';

1 span class="st0">'a', 'b', 'c');


Alle 3 Arrays enthalten die selben 3 Einträge: "a", "b" und "c".

Man kann sich den Inhalt eines Arrays folgendermaßen anzeigen lassen:

1 


Das würde in diesem Beipiel folgende Ausgabe erzeugen:

1 span class="st0">"a",
2   [1] => "b",
3   [2] => "c"
4   )


Es gibt 2 Formen von Arrays

  • indizierte
  • assoziative

In einem indizierten Array ist der Listenindex numerisch. Die Beispiele oben zeigen der Einfachheit halber alle indizierte Arrays.

In einem assoziativen Array ist der Listenindex meist alphanumerisch. Bsp.:

1 span class="st0">'a' => 'Apfel', 'b' => 'Banane', 'c' => 'Clementine');


foreach

Aufbau:

foreach (Array as Wert) Anweisungsblock
foreach (Array as Index => Wert) Anweisungsblock


Mit foreach geht man die Einträge eines Arrays durch.

  • foreach (Array as Wert)
  • foreach (Array as Schlüssel => Wert)


Die erste Variante von foreach nutzt man meist bei indizierten Arrays bei denen man nur die Werte benötigt.

1 span class="st0">'a', 'b', 'c''Buchstabe: ' . $value . '<br />' . "\n";
2 }

Ausgabe:

Buchstabe: a
Buchstabe: b
Buchstabe: c


Die zweite Variante wird meist bei assoziativen Arrays benutzt um sowohl den Schlüssel als auch den Wert benutzen zu können.

1 span class="st0">'a' => 'Apfel', 'b' => 'Banane', 'c' => 'Clementine''Buchstabe: '' steht f&uuml;r ' . $value . '<br />' . "\n";
2 }

Ausgabe:

Buchstabe: a steht für Apfel
Buchstabe: b steht für Banane 
Buchstabe: c steht für Clementine

include

Bei größeren, aber auch bei kleineren Projekten ist es teilweise wünschenswert, Codeteile (Konfigurationen, Funktionen etc.) in externe Dateien auszulagern.

In unserem Beispiel lagern wir die Begrüßung in die externe Datei 'config.php' aus:

1 //config.php
2 'Hallo, Welt!'

Jetzt binden wir diese Datei mit dem include-Befehl in die Hauptdatei ein:

1 //index.php
2 'config.php'

Der Code, der in der Datei config.php wird genau an die Stelle, an der die include-Anweisung steht, eingebunden.

Funktionen

Formulare

Datenbank

Trennung HTML und PHP (Templates)

Verwendet anstelle von:

1 span class="st0">'<div style="color:red;">True</div>''<div style="color:red;">False</div>'


1 span class="st0">"color:red;""color:red;"


Auf diese Art erspart sich php die Ausgabe des Strings und für den Programmiere ist es so leichter möglich den HTML Code zu erstellen.


Was und Wozu ist ein Template?

Bisher hat doch alles klasse geklappt, die ersten PHP programme funktionieren, also wozu sollte man sich nun aneignen Templates zu benutzen?

Zunächst mal, sollte klar sein, das HTML keine direkte ProgrammierSprache wie PHP ist. Man kann mit HTML keine Algorithmen bauen.

Genau hier ist ein Problem. Wenn wir komplexe darstellungsAlgorithmen erstellen verlieren wir bald den überblick, da der Algorithmuss wegen des ganzen HTML kaum noch zu erkennen ist. Wollen wir nun kleine änderungen vornehmen, wird das nicht sehr einfach.

Wir benötigen eine Möglichkeit Code und Html seperat voneinander zu erstellen. Und schon sind wir bei den Templates.

Das war nur einer von mehreren entscheidenen Gründen, wozu man eigentlich Templates nutzt, aber das ist ja erstmal nicht so wichtig!

Unsere kleine TemplateEngine.

Es handelt sich eigentlich nur um eine Funktion. HINWEIS: Diese Funktion ist unter Umständen noch nicht verständlich für einen Einsteiger, allerdings ist dies nicht so wichtig, hauptsache sie wissen erstmal wie sie die Funktion benutzen.

Code Ohne Templates

1 span class="st0">"<h1>Heute programmieren wir mir Templates</h1>""wir haben heute den ""d.m.Y"" Das ist doch Klasse?! ";
2 $name = 'gustav erlenhorst''peter schie mich tot'"<h2>Es ist Peter</h2>""<h2>Kein peter dann auch egal duuuu</h2>";
3 }


Template Funktion (gespeichert in template.php)

1 span class="st0">'Das Template existiert nicht ('.$path.')'''"%$name%"


Wie nutze ich nun diese Funktion?

Diese Funktion hat 2 Parameter, -der erste ist der Pfad zur TemplateDatei, -der zweite sind die Variablen von Template Als Array

Beispiel

1 span class="st0">'test.tpl''blub' => 'juhu'));

Im Template werden nun alle %blub% zu juhu ersetzt. Inhalt von test.tpl

Heyho %blub% %blub% JUHU

ergibt:

Heyho juhu juhu JUHU

Code dieses mal mit Templates

1 span class="st0">'template.php'; // wir laden die Datei in der sich unsere Template"engine" befindet
2 $name = 'gustav erlenhorst''peter schie mich tot') {
3   $wer = myTemplate('templates/main_peter.tpl''templates/main_any.tpl');
4 }
5 // Hauptausgabe
6 'date''d.m.Y'), 'wer''templates/main.tpl'


Die Templates wurden in den Ordner Templates/ gespeichert. Inhalt von template main.tpl:

<h1>Heute programmieren wir mir Templates</h1>
wir haben heute den %date% Das ist doch Klasse?! 
%wer%

Inhalt von template main_peter.tpl:

<h2>Es ist Peter</h2>

Inhalt von template main_any.tpl:

<h2>Kein peter dann auch egal duuuu</h2>

Weiteres

In diesem Beispiel sieht das Beispiel mit den Templates nicht viel einfacher aus, als das ohne. Es handelt sich hier aber auch nur um ein kleines Beispiel. Sobald komplexe seitenlayouts ausgegeben werden, wird der Vorteil allerspätestens sichtbar!

Die Funktion ist keine Ideallösung, sie soll nur dazu dienen ein gefühl für Templates zu bekommen. Im Internet gibt es weit bessere Lösungen zum gratis Download. Ich rate an diesem Punkt aber von der TemplateEngine-Smarty ab, da sie meiner Meinung nach das MVC-Modell sowie das Prinzip von den Templates nicht untersützt. Siehe auch: Smarty Kritik

Vorteile

- PHP Code wird übersichtlicher

- Templates lassen sich außerhalb von PHP leichter bearbeiten und ersetzen

- Kompletter Austausch der Templates möglich und somit ist es möglich das gesamte Design einer Webseite zu wechseln, ohne den PHP code nur zu sehen.

- Andere Mitentwickler ohne PHP kenntniss können leicht das Aussehen einer Applikation ändern.

- ...

Trennung Modell und Controller

ToDo: Dieser Artikel muss an dieser Stelle mit Folgendem ergänzt werden: ohne OOP!


OOP Einführung

ToDo: Dieser Artikel muss an dieser Stelle mit Folgendem ergänzt werden: nur sehr kurze Einführung vor den Templates


MVC mittels OOP

ToDo: Dieser Artikel muss an dieser Stelle mit Folgendem ergänzt werden: Trennung MVC mittels OOP


OOP Weiterführung