Webtechnologien – SS 2017 - Teil 6/PHP Iwi.f4.htw-berlin.de/.../Wiederholung/06-WT-PHP-I-2.pdf · Webtechnologien – SS 2017 - Teil 6/PHP I 34 For-Schleife • Auch hier wieder
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
2Webtechnologien – SS 2017 - Teil 6/PHP I
Literatur I
[6-1] Lubkowitz, Mark: Webseiten programmieren und gestalten. Galileo, 2003
• Als eigenständiges Programm - auch mit Fenster-Unterstützung. Dies wird hier nicht behandelt.
• Zusammen mit HTML
– innerhalb des Webservers (Apache, Modul mod_php)
– als Skript in einem separierten Prozess (nicht behandelt)
• Die Skripte werden auf den Web-Server gebracht, indirekt vom Browser aufgerufen und auf dem Server ausgeführt.
• Die Ausgabe der PHP-Routinen wird dann zum Browser geschickt.
<?php ...PHP-Code... ?> XML/XHTML-Stil
Einbinden in die html-Datei
12Webtechnologien – SS 2017 - Teil 6/PHP I
Syntax
• Jeder Befehl wird mit einem Semikolon abgeschlossen.
• Datei-Endung ist .php
• Groß-/Kleinschreibung spielt in den meisten Fällen eine Rolle.
• Kommentare:
<?php# Kommentar bis Zeilenende
?>
<?php// Kommentar bis Zeilenende
?>
<?php/* Kommentar über mehrere Zeilen */
?>
13Webtechnologien – SS 2017 - Teil 6/PHP I
Das erste Programm bzw. die erste Seite I
<html>……… <body> <?php
echo "Hallo world! <br/>";?></body> </html>
• Alles außerhalb <?php … ?> geht direkt an den Browser.
• echo gibt den Parameter aus. Es ist auch eine durch Kommata getrennte Liste von Parametern möglich, die aneinander gereiht ausgegeben werden.
• echo kann mit oder ohne Klammern aufgerufen werden: mit Klammern ist aber nur ein Parameter möglich, keine Parameterliste.Z.B. echo("Hallo world! <br>");
• Zeichenketten werden in "" gestellt.
• Der Output aus PHP wird gemischt mit den HTML-Teilen in der Reihenfolge von vorn nach hinten an den Browser gesendet.
14Webtechnologien – SS 2017 - Teil 6/PHP I
Das erste Programm bzw. die erste Seite II
<html>……… <body><p> Das ist mein erstes PHP-Skript
<?php echo "Hallo world! <br/>";?>
<p> und das wars schon.</body> </html>
<html>……… <body><p> Das ist mein erstes PHP-Skript
<p> und das wars schon.</body> </html>
Hallo world! <br/> PHP-Prozessor
15Webtechnologien – SS 2017 - Teil 6/PHP I
Variablen und deren Deklaration
• Namen beginnen mit "$" gefolgt von "_" oder einem BuchstabenDanach kommen nur noch folgende Zeichen: "a-zA-Z0-9_"
• Groß-/Kleinschreibung unterscheidet!
• Variablen werden normalerweise nicht deklariert, es gibt aber Ausnahmen.
• Variablen haben den Typ aus der rechten Seite der letzten Zuweisung.
• Beispiele für Variablen
$Vorname
$a
16Webtechnologien – SS 2017 - Teil 6/PHP I
Zuweisungen
$Variable= Ausdruck;
• Zuweisungen wie in C, Java und JavaScript
• Beispiele:
$Vorname= "Elvira";
$a= $a+1;
$a= 10+100; // $a hat am Ende den Wert 110
$a= $b." "; // $a hat den Wert von b mit
// einem Blank angehängt
• Die Variable hat anschließend den Typ der rechten Seite der Zuweisung.
• Jede Zuweisung hat als Wert den Wert des Ausdrucks auf ihrer rechten Seite, die wiederum Teil eines umfassenden Ausdrucks sein kann.
Achtung! Die gleichen Operatoren &&/and und ||/or haben eineunterschiedliche Bindungsstärke!Immer(!) Klammern setzen!
23Webtechnologien – SS 2017 - Teil 6/PHP I
Konvertierung von Typen
• Werte werden in den "erwarteten" Typ konvertiert.
• Innerhalb von Ausdrücken nach Integer, wenn ein Teil ein Integer ist, sonst Double, wenn ein Teil vom Typ Double ist.
Ausdruck Ergebnis
"3" + "4" 7
"3" . "4" "34"
"3" - "Eier" 3, da 3-0
"3 Äpfel"*"12 Birnen" 36
Bei der Konvertierung von String nach Integer wird von linksnach rechts solange konvertiert wie eine sinnvolle Zahl von linksnach rechts gelesen existiert. Startwert ist 0.
24Webtechnologien – SS 2017 - Teil 6/PHP I
Konvertierung nach Boolean
Bedeutung Werte anderer Typen Typ
false 0 Integer
0.0 Double
"0" (ist Integer 0 (!)) String
"" (Leerer String) String
'' (Leerer String) String
Leeres Array Array
Leeres Objekt Object
Alles andere bedeutet true.
25Webtechnologien – SS 2017 - Teil 6/PHP I
Abfragen des Typs I
Funktion True, wenn Variable
is_long(Variable) vom Typ long ist
is_double(Variable) vom Typ double ist
is_string(Variable) vom Typ string ist
is_array(Variable) ein Array ist
is_object(Variable) ein Object ist
is_bool(Variable) vom Typ bool ist
Funktionen zum Abfragen des Typs einer Variablen:
gettype(Variable) liefert den aktuellen Typ als String, bestimmt ihn aber nicht.
Diese Funktion sollte eigentlich nicht verwendet werden, da der Rückgabe-wert in Zukunft geändert werden könnte.Siehe dazu: http://de3.php.net/manual/de/function.gettype.php
26Webtechnologien – SS 2017 - Teil 6/PHP I
Abfragen des Typs II
Funktion True, wenn
is_null(Variable) Variable den NULL-Wert hat
isset(Variable) Variable keinen NULL-Wert hat
Der Null-Wert ist auch gleich der einzige Wert des Typs Null.
Funktionen zum Abfragen von Werten einer Variablen:
27Webtechnologien – SS 2017 - Teil 6/PHP I
Typumwandlungen / Cast
Cast Umwandlung in
(bool),(boolean) Boolean
(int), (integer) Integer
(real), (double), (float) Double
(string) String
(array) Array
(object) Objekt
cast-Operatoren:
Mit diesen Operatoren werden explizit die Typen innerhalb von Ausdrücken festgelegt.
• Der Typ von Array/Hash-Elementen kann innerhalb eines Arrays/Hashs beliebig verschieden sein.
• 2- oder mehrdimensionale Felder müssen – wie in Java – stückweise zusammengebaut werden, denn es gibt nur Vektoren.
• Beide Strukturen werden intern gleich implementiert, d.h. es handelt sich um eine lineare Liste, die aus Paaren von einem Schlüssel (Key, Indexwert) und dem Wert bestehen – genauso wie in JavaScript.
• Es können "Lücken" im Array vorhanden sein, die beim Zugriff in For-Schleifen beachtet werden müssen: wenn auf diese Lücken zugegriffen wird, gibt es eine Exception.
31Webtechnologien – SS 2017 - Teil 6/PHP I
if
• Wenn nur ein Befehl in einem Block vorkommt, könnten auch die {} weggelassen werden (was zu vermeiden ist).
• Die elseif-Konstruktion ist eine verkürzte Version eines geschachtelten IF-Konstrukts.
• Fehlt das break, werden die folgenden Statements ausgeführt.
switch(Ausdruck) { case Wert: .... [break;] case Wert: .... [break;] .... default: ....}
33Webtechnologien – SS 2017 - Teil 6/PHP I
while
• Auch hier dieselbe Semantik wie in C/C++/Java.
do { .... ....} while(Ausdruck);
while(Ausdruck) { .... ....}
34Webtechnologien – SS 2017 - Teil 6/PHP I
For-Schleife
• Auch hier wieder dieselbe Semantik wie in C/C++/Java.
• break bricht die Schleife ab.
• continue springt zurück zur Abbruchabfrage Ausdruck.
for(Start; Ausdruck; Veränderung) { .... ....}
35Webtechnologien – SS 2017 - Teil 6/PHP I
Foreach-Schleife
• Hier wird die Schleife immer für jedes Element durchlaufen, wobei $Variable die Laufvariable bzw. $Key der "Laufschlüssel" ist.
• Feld ist etwas, das als Array oder Hash interpretiert werden kann.
• Die erste Form wird bei Arrays, die zweite bei Hashs benutzt.
• Dies entspricht der For-In-Schleife bei JavaScript (und auch Java).
• Wenn ein Array/Hash Löcher haben kann, sollte möglichst diese Form der Schleife benutzt werden, da diese alle Löcher automatisch überspringt.
foreach(Feld as $Variable) { ....}
foreach(Feld as $key => $Variable) { ....}
Array
Hash
36Webtechnologien – SS 2017 - Teil 6/PHP I
Funktionen I
• In PHP können Funktionen an beliebiger Stelle definiert werdenEmpfehlung: Deklarieren am Anfang an zentraler Stelle
• Parameter werden per Call-By-Value übergeben,d.h. die Werte der Parameter werden kopiert.
• Es ist aber möglich die Adresse des Parameters mit & zu übergeben - das gilt analog auch für das Funktionsresultat.
• Sonderregelung bei den Objekten! Objekte werden immer per Adresse übergeben, nie als Kopie – also wie in Java.
function Name($arg1, $arg2, $arg3,.., $argN) { .....}
function Name($arg1, $arg2, $arg3,.., $argN) { ..... return Ausdruck;}
37Webtechnologien – SS 2017 - Teil 6/PHP I
Funktionen II
• Parameter mit Defaultwerten können dann beim Aufruf weggelassen werden.
• Wenn Parameter ohne Default-Werte beim Aufruf weggelassen werden, dann haben diese im Funktionskörper keinen Inhalt.Dies muss in der Funktion explizit geprüft werden.
• Jede Funktion kann mit beliebig vielen Parametern mit beliebigen Werttypen aufgerufen werden – unabhängig von der Deklaration.Die aufgerufene Routine muss dies berücksichtigen. Es gibt aber einen Mechanismus, um dies zu verhindern: ab PHP 7
function Hello($Name= "Helmut") { echo "Hallo ".$Name;}
Hello(); // gibt "Hallo Helmut" ausHello("Hanna"); // gibt "Hallo Hanna" aus
38Webtechnologien – SS 2017 - Teil 6/PHP I
Type Hints ab PHP 7 I
string
int
float
bool
array
Klassennamen
Interface
declare(strict_types=1);
function add(int $a, int $b) { return $a + $b;}function sub(int $a, int $b): int { return $a - $b;}$u= add(10,20);$v= sub(26,9);echo '$u='.$u.' $v='.$v;
Ausgabe: $u=30 $v=17
Es ist möglich, wie in anderenProgrammiersprachen für dieParameter und Resultate vonFunktionen Typen anzugeben.
Folgende Typen sind möglich:
Dies ist aber nur möglich, wenn als erstes die declare-Anweisung wie obenangegeben wird.
Ist der Return-Typ mit void deklariert, so darfein return-Statement fehlen oder es wird ohneeinen Parameter benutzt.
41Webtechnologien – SS 2017 - Teil 6/PHP I
Ausgabe-Routinen
echo $Stringprint $String
Gibt den String auf der Console aus.
var_dump(Expression) Gibt den Ausdruck samt Typ formatiert aus.http://php.net/manual/de/function.var-dump.php
var_export(Expression) Gibt den Ausdruck samt Typ so formatiert aus, dass dieser der PHP-Syntax entspricht http://de2.php.net/manual/de/function.var-export.php
Zur Ausgabe von Arrays oder Hashs ist var_export() sehr gut.
42Webtechnologien – SS 2017 - Teil 6/PHP I
Variablen als "Funktionen"
function func() { ....}$fcall= "func";$fcall();
Große Vorsicht, wenn der Funktionsname aus einem Formularstammt!
!
43Webtechnologien – SS 2017 - Teil 6/PHP I
Geltungsbereich in PHP
• In der linken Version wird nichts ausgegeben, denn die Variable $str in Ausgabe() ist lokal, in der rechten Version ist sie global; daher wird dort „Hallo World!" ausgegeben.
• Globale Variablen werden außerhalb von Funktionen deklariert und benutzt, aber nicht innerhalb von Funktionen - es sei denn sie werden dort mit dem Schlüsselwort global deklariert.
• Merke:Der erste Zugriff auf eine nicht vorhandene Variable erzeugt diese in dem Kontext des Zugriffs, also lokal oder global.
• Die oben vorgestellten Arrays $_GET[] sind überall global und können lokal ohne Deklaration benutzt werden.; daher heißen diese superglobal.
function Ausgabe() { echo $str;}$str= "Hallo World!";Ausgabe();
function Ausgabe() { global $str; echo $str;}$str= "Hallo World!";Ausgabe();
44Webtechnologien – SS 2017 - Teil 6/PHP I
Geltungsbereich III
• Mit static wird eine lokale Variable mit einer Lebenszeit des gesamten Skripts lokal deklariert.
Erster Aufruf!Schon 1 mal aufgerufen.Schon 2 mal aufgerufen.Schon 3 mal aufgerufen.
45Webtechnologien – SS 2017 - Teil 6/PHP I
Bemerkung über Deklaration
• In PHP werden Variablen üblicherweise nicht deklariert.
• Es gibt aber bisher folgende Ausnahmen:
– Variablen als Parameter
– Globale Variablen sollen lokal verwendet werden.
– Lokale Variablen sollen static (statisch) sein.
– (Bei den den Klassen gibt es noch weitere Ausnahmen)
46Webtechnologien – SS 2017 - Teil 6/PHP I
Einfügen externer Dateien I
• An jeder Aufrufstelle werden die Dateien als dorthin kopiert betrachtet.Dies bedeutet, dass an allen Stellen im PHP-Skript, also auch in Kontrollkonstrukten, include bzw. require verwendet werden darf.
• Bei beiden Konstrukten wird zu Beginn der Datei Filename in den HTML-Modus gewechselt; daher sind die PHP-Start-/Ende-Tags(<?php ... ?>) in den externen Dateien erforderlich.
• Besonderheit von include: Trotz Fehlern wird weiter gearbeitet
• Besonderheit von require: Bei Fehlern erfolgt Abbruch.
• Beide können mehrfach – auch geschachtelt - ausgeführt werden.