===== Allgemein =====
* PHP = PHP Hyper Text Präprozessor
* Füllt Websites mti dynamischen Informationen
* Läuft Serverseitig
* Syntaktisch Mischung aus C++ und Bash
===== Grundgerüst =====
* PHP darf nur in Dokumenten vorkommen mit der Endung .php (es sei denn es ist auf dem Webserver eingestellt, dass auch andere Dokumente durch PHP ausgewertet werden)
* PHP kann ganze Dokumente umfassen oder nur Abschnitte von Dokumenten
* PHP kann in html eingebettet werden (die Datei muss dann aber .php heißen)
Ein PHP-Bereich befindet sich immer in folgendem Code:
Alternativ funktioniert meist auch folgendes (sollte man aber nicht nutzen da es nicht überall funktioniert):
PHP-Code
?>
Der vorstehende Code kann dabei ein gesamtes Dokument umfassen ( am Ende) oder nur irgendwo in einem html-Dokument (mit Endung .php) auftauchen.
Beispiel für mitten im HML-Code:
Bla
Ein PHP-Beispiel
Hier ist das Beispiel zu Ende
===== Variablen =====
* Müssen nicht deklariert werden
* Können überall im Programmcode definiert werden
==== Skalare ====
* Können beliebige Werte aufnehmen (sowohl Zahlen, als auch Strings)
\\
Syntax: $//Variablenbezeichner//=//Wert//; \\ \\
//Variablenbezeichner:// Name der Variablen \\
//Wert:// Wert der der Variablen zugewiesen wird \\ \\
Zugriff erfolgt ebenfalls per $Bezeichner.
==== Arrays ====
* Können mehrere Skalare aufnehmen
* Ansprache erfolgt über einen Index
* Werden wie normale Variablen behandelt
**Zuweisung:** \\
Syntax: $//Bezeichner//=array(//Wert1//,//Wert2//,//Wert3//); \\
Beispiel: $Namen=array("Susi","Peter","Dieter"); \\ \\
Bezeichner: Name des Array \\
Wertx: Werte die dem Array zugewiesen werden sollen \\ \\ \\
**Zugriff:** \\
Syntax: $//Bezeichner//[//Index//];\\
Beispiel: $a=Name[$index];
==== Hashmap/Assoziative Arrays ====
* Arrays bei denen der Index ein Wort ist
**Defintion:** \\
Syntax: $//Bezeichner//=array(//Schlüssel1// => //Wert1//, //Schlüssel2// => //Wert2//); \\
Beispiel: $Namen=array('Sorglos' => 'Susie', 'Mise' => 'Peter'); \\
==== Multidimensionale Arrays/ Hashmaps ====
* Arrays deren einzelne Felder wiederum auf Arrays verweisen
* praktisch Arrays bei denen der Wert von mehreren Indexen abhängt
* wenn man für einen Basis-Index mehrere Werte speichern will
* Basis-Index (index 1) Name und Unterindexe
\\
** Deklaration und Definition ** \\ \\
Syntax: //Bezeichner//= array //Index1// => array(//Wert1-1//,//Wert1-2//), //Index2// => array (//Wert2-1//,//Wert2-2//) oder \\
//Bezeichner//= array //Index1// => array(//Index1-1// => //Wert1-1//,//Index1-2// => //Wert1-2//), //Index2// => array (//Index2-1// => //Wert2-1//,//Index2-2// => //Wert2-2//) \\ \\
Beispiel: $mymulti=array "Jane" => array ('30.06.2011', 'Herlinger') oder \\
$multi=array "Test1" => array ('Geburtsdatum' => '30.06.2011', 'Name' => 'Herlinger');
\\ \\
** Zugriff/Wertzuweisung **
Syntax: $Bezeichner[//Index1//][//Index2//]; bzw.
$Bezeichner[//Index1//][//Index2//]="//Wert//";
* **Bezeichner:** Name des Arrays
* **Index1:** Numerischer oder sprechender Index des Feldes auf das zugegriffen werden soll
* **Index2:** Numerischer oder sprechender Index des Feldes auf das zugegriffen werden soll
* **Wert:** Wert der zugewiesen werden soll
===== Funktionen =====
^Name ^Beschreibung ^
|strlen()|Ermittelt die Länge eines Strings \\ \\ Syntax: strlen(//String bzw. Variable//)|
|strpos()|Ermittelt die Position eines gesuchten Strings innerhalb eines anderen. \\ \\ Gibt die numerische Position des Substrings zurück. \\ \\ **Achtung:** Die Rückgabe kann den boolschen Typ false enthalten wenn der String nicht enthalten ist. Deswegen sollte vor dem weiterverarbeiten per Prüfung auf "=== false" geprüft werden (=== prüft ob die Variable vom Typ Bool ist und danach ob der dort enthaltene Wert false ist)|
===== Konstrukte =====
==== Kommentare ====
/*Kommentar */
==== if-else ====
* Verzweigung
* Trifft ein Zweig zu, werden die danach folgenden nicht mehr abgearbeitet (auch wenn sie matchen würden)
\\ \\
**Syntax:** \\ \\
if (Bedingung)
{
Anweisung;
}
elseif (Bedingung)
{
Anweisung;
}
else
{
Anweisung;
}
\\ \\
* elseif ist eine optionaler zusätzlicher bedingter Anweisungsblock
* wird nur ausgeführt wenn die davor liegenden if oder elseif-Statements nicht zutreffend waren
* else wird Bedingungslos durchlaufen wenn die davor liegenden if oder elseif-Blöcke nicht ausgeführt wurden
==== switch ====
* Auswahl-Anweisung
* der Inhalt einer Variablen wird gegen einen Satz möglicher Werte geprüft -> stimmt der Wert in der Variablen und der Auswahl-Wert überein wird der Anweisungsblock ausgeführt
* ähnlich mehreren elseif-Anweisungen
* wenn im Block kein break angegeben wird, werden auch alle nachfolgenden Wert-Angaben auf zutreffen geprüft und gegebenenfalls weitere Blöcke ausgeführt
\\ \\
Syntax:
switch (//Variable//)
{
case //Auswahl1//:
//Code1//;
break;
case //Auswahl2//:
//Code2//;
break;
default:
//Code3//;
break;
}
\\
* Auswahl:
==== while ====
* Schleife
* Wird ausgeführt solange die Bedingung wahr ist
* wird nur ausgeführt wenn die Bedingung zumindest vor dem ersten Durchlauf "wahr" ist
Syntax: \\
while(Bedingung)
{
Code;
}
* **Bedingung:** Bedingung ist die Bedingung die gegeben sein muss damit die Schleife (weiter) ausgeführt wird
\\ \\
Beispiel: \\
while($a < 6 )
{
print $a;
a++;
}
==== do-while ====
* Schleife
* Wird ausgeführt solange die Bedingung "wahr" ist
* Fußgesteuert
* Bedingung steht im Fuß (am Ende des zu wiederholenden Codes)
* wird mindestens einmal durchlaufen (auch wenn die Bedingung von Anfang an nicht gegeben war)
\\
Syntax:
do
{
Code;
}
while(Bedingung);
* **Bedingung:** Bedingung die bestimmt ob die Schleife wiederholt ausgeführt wird (wenn die Bedingung "wahr" ist)
\\ \\
Syntax:
do
{
print $a;
a++;
}
while($a < 6);
==== for-Loop ====
* Schleife die eine bestimmte Anzahl von Durchläufen durchlaufen werden soll
Syntax:
for (Initialisierung;Bedingung;Inkrementation)
{
Code;
}
\\
* **Initalisierung:** Deklarierung und Definierung und Initalisierung der Zählervariable. Es kann statt dessen aber auch beliebiger anderer Code ausgeführt werden.
* **Bedingung:** Bedingung die gegeben sein muss damit die Schleife (weiter)ausgeführt wird. Ist die Bedingung nicht (mehr) erfüllt wir die Schleife nicht mehr weiter ausgeführt bzw. wenn die Bedingung schon am Anfang nicht gegeben ist, wir die Schleife gar nicht ausgeführt.
* **Inkrementation:** Veränderung der Zählerveriable - in der Regel inkrementieren oder dekrementieren. Kann aber beliebigen Code enthalten.
\\
Beispiel:
for (a=0;a<=5;a++)
{
echo "a ist jetzt $a";
}
\\
Das obige Beispiel führt die Schleife 6 mal aus und gibt hintereinander 0,1,2,3,4,5 aus.
==== foreach-Loop ====
* wird durchlaufen für alle Elemente einer Hashmap oder eines Arrays
* Variable nimmt immer aktuelles Element für den derzeitigen Durchlauf auf
Syntax:
foreach ($Array as $Wert)
{
Code;
}
\\
Beispiel:
$myhash=array ("Peter" => "Müller","Edith" => "Schröder");
foreach ($myhash as $value)
{
echo "$value";
}
==== Funktionen ====
Syntax:
function Funktionsname (Parametervariable1, Parametervariable2)
{
Code;
return Rückgabewert;
}
Rückgabevariable=Funtionsname(Parameter1, Parameter2);
* **Parametervariable**: Variablen die an die Funktion übergebene Werte aufnehmen und innerhalb der Funktion zur Verfügung stellen
* Übergabe erfolgt als **Parameterx**
* **Rückgabewert**: Wert der an den Aufrufer zurückgegeben wird
* In Syntaxrklärung wird der Wert in **Rückgabevariable** gespeichert
\\
Beispiel:
$eins=5;
$zwei=3;
function addition ($zahleins,$zahlzwei)
{
$result=$zahlein+$zahlzwei;
return $result;
}
echo "Das Ergebnis von $eins + $zwei ist " . addition($eins,$zwei);
===== Operatoren =====
^Name ^Beschreibung ^
|String-Verknüpfung|String1.String2|
|--|Decrement|
|++|Increment|
|+=|Zuweisung und Addition \\ \\ Wert vor dem = wird mit dem Wert hinter = addiert und in der Variable vor = gespeichert. \\ \\ a+=2 -> a=a+2;|
|-=|ZUweisung und Substraktion \\ \\ Siehe +=|
|*=|Zuweisung und Multiplikation \\ \\ Siehe +=|
|/=|Zuweisung und Division \\ \\ Siehe +=|
|.=|Zuweisung und Verkettung \\ \\ String vor dem = und hinter dem = werden verkettet und der Variable vor = zugewiesen|
|==|Vergleichsoperator|
|!=|Ungleich|
|<>|Ungleich|
|>|Größer als|
|<|Kleiner als|
|>=|Größer als oder gleich|
|<=|Kleiner als oder gleich|
|&&|Und|
| |
| Oder|
|!|Not \\ Negiert den Ausdruck|
|===|Prüfung ob der Typ der Variablen identisch ist und wenn ja, den entsprechenden Wert enthält. \\ \\ Ist der Typ nicht identisch oder der Wert nicht gleich wird false zurückgegeben. \\ \\ \\ |
===== Troubleshooting =====
^Problem ^Mögliche Lösungen ^
|unexpected T_VARIABLE|
* Variable wird ausgelesen, aber vorher nicht gesetzt
* Der PHP-Bereich wird durch php eingeleitet -> muss |
===== Konfiguration =====
* /etc/php5/apache2/php.ini (unter Linux mit installiertem Apache2)
* Konfiguration kann zentral für einzelne Verzeichnisse/URLs angepasst werden
* Konfiguration kann im jeweiligen Verzeichnis angepasst werden
Die Php-ini kann zentral (in der /etc/php5/apache2/php.ini) konfiguriert werden. \\
In dieser Datei können für einzelne Verzeichnisse oder URLs Parameter definiert werden -> in dem per [PATH=//Verzeichnispfad//] bzw. [HOST=//Domainname//] Untersektionen definiert werden (diese haben keinen Abschluss, sondern Enden wo eine neue Sektion beginnt oder die Datei zu Ende ist). **Hinweis:** Dies funktioniert derzeit nur mit CGI/FastCGI.\\
In Unterverzeichnissen kann eine .user.ini (Dateiname hängt vom Parameter user_ini.filename ab und auch ob diese Funktion nutzbar ist) die Parameter überschreiben.
===== Externe Informationen =====
* Doku: http://www.php.net/manual/de/langref.php
* Doku: http://www.w3schools.com/php/
* Referenz: http://php.net