28
2 Webtechnologien – SS 2017 - Teil 6/PHP I Literatur I [6-1] Lubkowitz, Mark: Webseiten programmieren und gestalten. Galileo, 2003 [6-2] Möhrke, Carsten: Besser PHP programmieren. Galileo, 4. Auflage, 2012 [6-3] Samar, Richard et al.: PHP de Luxe. mitp, 4. Auflage, 2004 [6-4] Möhrke, Carsten: PHP PEAR. Galileo, 2005 [6-5] Lerdorf, Rasmus; Bergmann, Sebastian; Hicking, Garvin: PHP kurz&gut. O'Reilly, 3. Auflage, 2006 [6-6] Bergmann, Sebastian: PHPUnit kurz&gut. O'Reilly, 2006 [6-7] Reimers, Stefan; Thies, Gunnar: PHP 5.3 & MySQL 5.1. 2. Auflage 2009 [6-8] Sklar, David; Trachtenberg, Adam: PHP5 Kochbuch. O'Reilly, 3. Auflage, 2009 [6-9] Schmidt, Stephan: PHP Design Patterns. O'Reilly, 2. Auflage, 2009

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

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 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

2Webtechnologien – SS 2017 - Teil 6/PHP I

Literatur I

[6-1] Lubkowitz, Mark: Webseiten programmieren und gestalten. Galileo, 2003

[6-2] Möhrke, Carsten: Besser PHP programmieren. Galileo, 4. Auflage, 2012

[6-3] Samar, Richard et al.: PHP de Luxe. mitp, 4. Auflage, 2004

[6-4] Möhrke, Carsten: PHP PEAR. Galileo, 2005

[6-5] Lerdorf, Rasmus; Bergmann, Sebastian; Hicking, Garvin: PHP kurz&gut. O'Reilly, 3. Auflage, 2006

[6-6] Bergmann, Sebastian: PHPUnit kurz&gut. O'Reilly, 2006

[6-7] Reimers, Stefan; Thies, Gunnar: PHP 5.3 & MySQL 5.1. 2. Auflage 2009

[6-8] Sklar, David; Trachtenberg, Adam: PHP5 Kochbuch. O'Reilly, 3. Auflage, 2009

[6-9] Schmidt, Stephan: PHP Design Patterns. O'Reilly, 2. Auflage, 2009

Page 2: 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

3Webtechnologien – SS 2017 - Teil 6/PHP I

Literatur II – Common Gateway Interface

[6-10] Schmidt, Stephan: PHP Design Patterns. O'Reilly, 2. Auflage, 2009

[6-11] http://de.wikipedia.org/wiki/Common_Gateway_Interface

[6-12] http://www.fh-wedel.de/~si/seminare/ws96/ausarbeitung/cgi/cgi0.htm

[6-13] http://www.fh-wedel.de/~si/seminare/ws96/ausarbeitung/cgi/cgi00.htm

[6-14] http://de.wikipedia.org/wiki/FastCGI

[6-15] http://www.fastcgi.com/devkit/doc/fcgi-spec.html

[6-16] http://www.fastcgi.com/drupal/

[6-17] The Common Gateway Interface (CGI) Version 1.1 http://www.ietf.org/rfc/rfc3875

4Webtechnologien – SS 2017 - Teil 6/PHP I

Literatur im Web

[W1] Grundlegende Dokumentation:http://www.php.nethttp://www.php.net/docs.php

[W2] http://de.wikipedia.org/wiki/PHP

[W3] Tipps und Code-Schnipsel:http://www.selfphp.info/de/extras/download.php

[W4] Erstes Tutorial (Deutsch): http://de.php.net/tut.php

[W5] http://php.net/manual/de/migration70.php http://php.net/manual/de/migration71.php

Page 3: 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

5Webtechnologien – SS 2017 - Teil 6/PHP I

Übersicht

• Geschichte

• Sinn und Aufgabe

• Datentypen

• Zugriff auf Formulardaten (CGI)

• Environment

• Kontrollstrukturen

• Funktionen

6Webtechnologien – SS 2017 - Teil 6/PHP I

Geschichte

In diesen Foliensätzen wird der Kern der PHP-Version 7.1.* behandelt.

1994 PHP/FI von Rasmus Lerdorf 2009 PHP Version 5.3

1995 PHP/FI 2.0 2012 PHP Version 5.4

1998 PHP Version 3 2013 PHP Version 5.5

2000 PHP Version 4 2014 PHP Version 5.6

2004 PHP Version 5 2015 PHP Version 7.0

2016 PHP Version 7.1

PHP = Personal Home Page Tools (ursprünglicher Name)PHP = PHP Hypertext Processor (aktueller Name)

Page 4: 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

7Webtechnologien – SS 2017 - Teil 6/PHP I

Ein paar Statistiken I – Oktober 2016

Aus:http://www.tiobe.com/index.php

TIOBE ProgrammingCommunity Index

8Webtechnologien – SS 2017 - Teil 6/PHP I

Ein paar Statistiken II – Oktober 2016

TIOBE ProgrammingCommunity Index

Aus:http://www.tiobe.com/index.php

Page 5: 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

9Webtechnologien – SS 2017 - Teil 6/PHP I

Ein paar Statistiken III – Oktober 2015

Aus:http://news.netcraft.com/archives/category/around-the-net/

Aus:http://w3techs.com/

10Webtechnologien – SS 2017 - Teil 6/PHP I

Ein paar Statistiken IV – Oktober 2015

Aus:http://w3techs.com/

Page 6: 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

11Webtechnologien – SS 2017 - Teil 6/PHP I

Benutzung

• 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 */

?>

Page 7: 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

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

Page 8: 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

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.

Page 9: 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

17Webtechnologien – SS 2017 - Teil 6/PHP I

Einfache Datentypen (Basis-Datentypen)

Datentyp Beispiele für Werte Größe

Integer 23, -4, 0377 (Oktal),0xFF (Hexadezimal)

0b01010001 (Binär)

32 bit (Windows)

64 bit(falls möglich)

Double 3.1415, -2.2, 1.678e23, -2.4e-6 64 bit, IEEE754

Boolean • Für alle Werte außer 0: true

• Für 0-Werte: false

Operator Erläuterung

+ Addition

- Subtraktion

* Multiplikation

/ Division

% Modulo

Page 10: 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

19Webtechnologien – SS 2017 - Teil 6/PHP I

Strings II

• Namen von Variablen können und müssen manchmal mit {} geklammert werden, z. B.

$typ= 'Hoch'; $HS= "$typschule" ergibt '' $HS= "${typ}schule" ergibt 'Hochschule'

$typ= 'Grund';$GS= "${typ}schule" ergibt 'Grundschule'

$NN= '${typ}schule' ergibt '${typ}schule'

• Sonderzeichen "\" als Fluchtzeichen (Escape) nur in "…":

Zeichen Erläuterung Zeichen Erläuterung

\n Newline \$ $-Zeichen

\r Return \" "-Zeichen

\t Tabulator \077 Oktaler Wert

\\ \ selbst \xFF Hex-Wert

Hinweis:Es gibt keinBackspace (\b).

20Webtechnologien – SS 2017 - Teil 6/PHP I

Vergleichsoperatoren

Operator Erläuterung ergibt wahr wichtig

< kleiner 3<7

<= kleiner gleich 5.7<=10e4

> größer 3>2.9

>= größer gleich 3>=3.0

== gleich 9 == "9" Typanpassung!

!= ungleich 9!="s"

=== identisch 9 === 9 Keine Anpassung

!== nicht identisch 9 !== "9" Keine Anpassung

Beispiel Ergebnis

9 == "9" wahr

9 === "9" falsch

9 === 9 wahr

0x9 === 9 wahr

9.0 === 9 falsch

Die Identität erfordert, dass nebendem Wert auch der Typ gleich seinmuss.

Page 11: 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

21Webtechnologien – SS 2017 - Teil 6/PHP I

Zuweisungen mit Operatoren

Operator Beispiel Ergebnis nach $a= 9;

+= $a+= 1; 10

-= $a-= 1; 8

*= $a*= 2; 18

/= $a/= 2; 4,5

%= $a%= 2; 1

.= $a.= "zig"; "9zig"

Typisch:

$a= "Guten Tag!";$a.= "<br/>";

Diese Form der String-Zusammensetzungist sehr beliebt – aber: Vermeiden Sie das!

22Webtechnologien – SS 2017 - Teil 6/PHP I

Logische Operatoren

PHP PHP Erläuterung Java Pascal

and && Logisches Und && and

or || Logisches Oder || or

xor Logisches Exklusiv-Oder

! Negation ! not

Beispiel

($a!=0) and ($b=="Evelyn")($a!=0) && ($b=="Evelyn")

Siehe dazu: http://www.php.net/manual/de/language.operators.logical.php

Achtung! Die gleichen Operatoren &&/and und ||/or haben eineunterschiedliche Bindungsstärke!Immer(!) Klammern setzen!

Page 12: 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

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.

Page 13: 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

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:

Page 14: 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

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.

Siehe dazu:http://www.php.net/manual/de/language.types.type-juggling.php

28Webtechnologien – SS 2017 - Teil 6/PHP I

ARRAY

• Es gibt nur 1-dimensionale Felder mit einem positiven Integer-Index (einschließlich 0).

• Die Indizes laufen von 0 bis zur Größe -1.

• Auf Array-Elemente wird durch Name[Expression] zugegriffen.

• Arrays werden durch elementweises Zuweisen erstellt:

• Dasselbe in einem Stück und in gleichwertigen Versionen:

$a[0]= "Hallo";$a[1]= "Gerhardt";$a[2]= "!";

$a[]= "Hallo";$a[]= "Gerhardt";$a[]= "!";

Das Weglassen der Indices bewirkt ein hinten Anhängen miteinem gleichzeitigen Erhöhen des höchsten Indexes.

$a= array("Hallo","Gerhardt","!");

$a= ["Hallo","Gerhardt","!"];Verkürzte Form

Page 15: 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

29Webtechnologien – SS 2017 - Teil 6/PHP I

HASH

• Ein Hash ist ein Array, wobei der Index ein String ist. Oder anders formuliert: Die Elemente haben einen Namen.

• Auf Hash-Elemente wird durch Name['String'] zugegriffen.

• Ein Hash wird als Menge von Paaren (Index, Value) aufgefasst.

• Hashs werden durch elementweises Zuweisen erstellt:

• Dasselbe in einem Stück:

$b= array("Anrede"=>"Frau","Vorname"=>"Elvira", "Nachname"=>"Meier-Vormann");

$b= ["Anrede"=>"Frau","Vorname"=>"Elvira", "Nachname"=>"Meier-Vormann"];

$b["Anrede"] = "Frau";$b["Vorname"] = "Elvira";$b["Nachname"]= "Meier-Vormann";

Verkürzte Form

30Webtechnologien – SS 2017 - Teil 6/PHP I

ARRAY und HASH

• 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.

Page 16: 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

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.

if(Ausdruck) { ....} [ else { ....} ]

if(Ausdruck) { ....} elseif (Ausdruck) { ....} elseif (Ausdruck) { .... ....}

32Webtechnologien – SS 2017 - Teil 6/PHP I

switch

• Das Switch-Konstrukt ist wie in C/C++/Java.

• Fehlt das break, werden die folgenden Statements ausgeführt.

switch(Ausdruck) { case Wert: .... [break;] case Wert: .... [break;] .... default: ....}

Page 17: 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

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) { .... ....}

Page 18: 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

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;}

Page 19: 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

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.

Page 20: 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

39Webtechnologien – SS 2017 - Teil 6/PHP I

Type Hints ab PHP 7 II

function writeHW(bool $what): ?string{ if($what) { return 'Hallo World'; } else { return null; }}var_dump(writeHW(true));var_dump(writeHW(false));

function write(?string $str){ var_dump($str);}write('Hello');write(null);

string(11) "Hallo World"NULL

string(5) "Hello"NULL

Wenn statt eines Wertes vom erwarteten Typ ein Null auch geliefert bzw.übergeben werden kann, wird dies durch ein vorlaufendes ? Gekennzeichnet.

40Webtechnologien – SS 2017 - Teil 6/PHP I

Type Hints ab PHP 7 III

function swap(&$left, &$right): void{ if ($left === $right) { return; } $tmp = $left; $left = $right; $right = $tmp;}$a = 1;$b = 2;var_dump(swap($a, $b), $a, $b);

Die Routine swap tauscht diebeiden Variablen, die mit Call-by-Reference übergebenwurden (&).Diese Routine liefert immer null.

Quelle:http://php.net/manual/de/ migration71.new-features.php

NULLint(2)int(1)

Ist der Return-Typ mit void deklariert, so darfein return-Statement fehlen oder es wird ohneeinen Parameter benutzt.

Page 21: 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

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!

!

Page 22: 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

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.

function Counter() { static $cnt= 0; if($cnt==0) { echo "Erster Aufruf!\n"; } else { echo "Schon $cnt mal aufgerufen.\n"; } $cnt++;}Counter();Counter();Counter();Counter();

Erster Aufruf!Schon 1 mal aufgerufen.Schon 2 mal aufgerufen.Schon 3 mal aufgerufen.

Page 23: 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

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.

require(Filename);include(Filename);

require("Prefix.inc.php");include("Deklaration.inc.php");

Page 24: 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
Page 25: 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

49Webtechnologien – SS 2017 - Teil 6/PHP I

Schnittstelle zwischen Server und Skript (CGI)

Web-Server

PHP-Processor

Schnitt-stelleerstellt(2)

read(1) ruftauf(3)

Die Schnittstellebesteht aus Hashs:

$_GET[] Formulardaten

$_POST[] Formulardaten

$_SERVER[] Daten über Webserver

$_COOKIE[] Cookies

$_ENV[] Daten über Umgebung

$_SESSION[] Session-Variablen

$_FILES[] Hochgeladene Dateien

benutzt(4)

50Webtechnologien – SS 2017 - Teil 6/PHP I

Beispiele für Server-Variablen

Variable Bedeutung

$_SERVER['PHP_SELF'] Pfadname zum Skript selbst

$_SERVER['HTTP_HOST'] Name, IP-Adresse des Geräts mit dem Server

$_SERVER['HTTP_USER_AGENT'] Browsernamen

$_SERVER['HTTP_REFERER'] Vorherige URL beim Browser

$_SERVER['REMOTE_ADDR'] Name, IP-Adresse des Browsers

$_SERVER['SCRIPT_FILENAME'] Absoluter Pfadname des Skripts

$_SERVER['HTTPS'] Wird gesetzt, wenn mit https zugegriffen wird

Siehe dazu: http://php.net/manual/en/reserved.variables.server.php

Page 26: 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

51Webtechnologien – SS 2017 - Teil 6/PHP I

Daten aus Formularen I

• Der Name des INPUT-Tags ist Name des PHP-Hashs mit dem Inhalt des INPUT-Tags.

• Beispiel:

<form action="ID.php" method="get">Name: <input type="text" name="user"/><br/>Passwort:<input type="text" name="password"/><br/><input type="submit" value="Login"/>

</form>

Im Skript ID.php sind damit die Variablen $_GET['user'] und$_GET['password'] gesetzt.

Wird mit der Methode POST gearbeitet, so heißen die Variablen:$_POST['user '] und $_POST['password']

52Webtechnologien – SS 2017 - Teil 6/PHP I

Daten aus Formularen II

• Dies geht auch mit Feldern bei Mehrfachauswahl:

<form action="pizza.php" method="post">Pizza mit

<select name="Zutaten[]" size="3" multiple> <option>Peperoni</option> <option>Schnittlauch</option> <option>Spaghetti</option></select><input type="submit" value="Bestellen"/>

</form >

Dann existiert ein Array mit den selektierten Werten, aufdas mit $_POST['Zutaten'] zugegriffen werden kann.

Page 27: 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

53Webtechnologien – SS 2017 - Teil 6/PHP I

Daten aus Formularen III

Variable Beispiel Erläuterung

$_GET $_GET['Vorname'] Zugriff auf Formularelemente

$_POST $_POST['PLZ'] Zugriff auf Formularelemente

$_REQUEST $_REQUEST['Vorname'] Zusammenfassung von $_GET, $_POST und $_COOKIE

$_FILES $_FILES['Datei'] Enthält Informationen über hoch geladene Dateien

54Webtechnologien – SS 2017 - Teil 6/PHP I

Superglobal

• Die aufgeführten Hash/Variablen sind global und brauchen nicht deklariert zu werden. Dies wird als superglobal bezeichnet.

• Aus Sicherheitsgründen sollte der Zugriff auf die Formulardaten immer über den vorgestellten Mechanismus erfolgen.

Page 28: 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

55Webtechnologien – SS 2017 - Teil 6/PHP I

Nach dieser Anstrengung etwas Entspannung...