2. WER ICH BIN ?
Insformatikstudent (WI) an der FH Köln
in Gummersbach
Programmiert seit 8. Lebensjahr
Beherrscht über 10
Programmiersprachen
Seit 2001 in php-entwicklung involviert
Autor eines Blogs für
Androidprogrammierung
2
3. AM ANFANG WAR DAS PROBLEM
Die erste Version entwickelte 1994 Rasmus Lerdorf, der
eigentlich nur eine Möglichkeit zur Programmierung seines
eigenen Webservers suchte - Dynamische Seiten
Hieß zu Beginn "Personal Home Page“ danach
"PHP HyperText Preprocessor“
Sein Problem: Besucherzähler zu implementieren
3
5. VERSION NACH VERSION
1995 PHP / FI (Form Interface/Interpreter) quasi PHP 2
1999 PHP 3:
Andi Gutmans und Zeev Suraski machten ein Remake
mit Lerdorf
2000 PHP 4:
Zend Engine 1 – Ausführungsgeschwindigkeit erhöht
Sicherheit verbessert, Sessions eingeführt,
neue Sprachkonstrukte
2004 PHP 5:
Zend Engine 2 – OOP, XML, DOM, Exceptions-Unterstützung,
uvam.
2012 PHP 6: Nein PHP 5.4 !
5
6. VERBREITUNG
PHP wird auf etwa 244 Millionen Webseiten eingesetzt (Stand:
Januar 2013) und wird auf ca. 78,8 % aller Websites
als serverseitige Programmiersprache verwendet (Stand: März
2013) Die am häufigsten verwendete PHP-Version ist 5.3 (Stand:
März 2013).
MySQL: Forrester berichtete, dass MySQL die höchste
Akzeptanrate und das höchste Wachstum verzeichnet. MySQL
hat gemäß Forrester weiterhin die größte Marktbedeutung im
Open-Source-Datenbankmarkt und hat mit geschätzten 16.000
die höchste Anzahl zahlender Kunden für Produktsupport.
6
7. SPRACHMERKMALE VON PHP
Dynamische Typisierung
Erlaubt prozedurale, aber auch klassenbasierte, objektorientierte
Programmierung.
Eine objektorientiertes PHP Anwendung besteht aus einer
Menge von PHP-Klassen, die in Quelltextdateien, die den Regeln
der PHP Programmiersprache genügen, deklariert werden.
Diese Quelltextdateien werden vom PHP-Interpeter übersetzt
und ausgeführt.
7
8. LAMP – WAMP - WIMP
Linux / Windows
Apache / IIS
MySQL / MariaDB
PHP – CGI-Modul oder Modul in Apache
XAMPP
8
9. PHP FUNKTIONSTEST
Erstellen Sie eine kleine PHP-Datei im „htdocs-Ordner“ mit Namen
phpinfo.php mit folgendem Inhalt:
<?php
phpinfo();
?>
Ausgabe der Konfigurationseinstellungen
9
10. WER C++/JAVA KANN, DER KANN AUCH PHP
Hallo Welt-Beispiel
1: <!DOCTYPE html> <html>
2: <head> <meta charset=“utf-8“ />
3: <title>PHP Test</title>
4: </head>
5: <body>
6: <?php echo 'Hello World'; ?>
7: </body>
8: </html>
10
11. VARIABLEN
<?php
$text = "Ich bin ein String !";
echo $text;
Ich bin ein String !
echo "<br>";
echo $text,$text,$text;
echo "<br>";
Ich bin ein String !Ich bin
ein String !Ich bin ein
String !
11
$L = "langer"; $K = "kurzer";
echo "Ich bin ein $L$L$L$L$L Text !";
Ich bin ein
langerlangerlangerlangerlanger Text !
echo "<br>";
echo "Ich bin ein $K Text !";
Ich bin ein kurzer Text !
echo "<br>";
$I = 10;
$J = 5;
echo $I,"+",$J,"=",$I+$J; ?>
10+5=15
12. SCHLEIFEN AS USUAL
12
DO-WHILE
FOR
Aktueller Zähler: 0
Aktueller Zähler: 1
Aktueller Zähler: 2
Aktueller Zähler: 3
Aktueller Zähler: 4
Aktueller Zähler: 5
Aktueller Zähler: 6
i ist jetzt: 0
i ist jetzt: 1
i ist jetzt: 2
…
i ist jetzt: 9
i ist jetzt: 10
13. WENN… BEDINGUNGEN
<?php
$tag = date("l");
if ($tag =="Monday") echo "Heute ist Montag";
if ($tag =="Tuesday") echo "Heute ist Dienstag";
if ($tag =="Wednesday") echo "Heute ist Mittwoch";
if ($tag =="Thursday") echo "Heute ist Donnerstag";
if ($tag =="Friday") echo "Heute ist Freitag";
if ($tag =="Saturday") echo "Heute ist Samstag";
if ($tag =="Sunday") echo "Heute ist Sonntag";
?>
Heute ist Mittwoch
13
14. FUNKTIONEN
<?php
function tag ($anzahl)
{
$sekunden = 3600 * 24 * $anzahl;
return $sekunden;
}
$tag = 7;
$x = tag($tag);
echo "$tag Tage bestehen aus $x Sekunden !";
?>
7 Tage bestehen aus 604800 Sekunden !
14
15. PHP GOES OOP – WARUM ?
Modularisierung: Zerlegung des Software-
Systems in autonome Einheiten.
Wiederverwendung: Bereits implementierte
Einheiten sollen zu einem neuen Ganzen zusammengesetzt werden
können.
Erweiterbarkeit: Bestehende Einheiten sollen um
neue Funktionalität erweitert werden können.
Abstraktion und Kapselung: Der Verwender einer solchen Einheit nutzt
deren öffentliche Schnittstelle, Implementierungsdetails werden
versteckt.
15
17. KLASSEN UND OBJEKTE
Klasse: Bauplan für die Erzeugung von Objekten
Klasse kapselt Daten (Attribute) und Operationen (Methoden) in
einer Einheit.
Jedem Objekt lässt sich eine Klasse zuordnen.
Den Objekten einer Klasse ist ihre Funktion gemeinsam, da sie
über die selben Methoden verfügen.
Die Objekte einer Klasse unterscheiden sich nur in ihrem Zustand
von einander.
17
20. MAGISCHE METHODEN
PHP reserviert alle Funktionsnamen, die mit __ beginnen, als
magisch.
Die Funktionen __construct(), __destruct(), __call(), __callStatic(),
__get(), __set(),__isset(), __unset(), __sleep(), __wakeup(),
__toString(), __invoke(), __set_state(), and__clone() , __autoload()
sind in PHP-Klassen magisch.
20
21. HTML PHP
….
<form method="get" action="tuwas.php">
<input type="text" size="4" name="werta“ />
<input type="text" size="4" name="wertb“ />
</form>
21
In PHP:
$_GET[‘werta‘]; Eingegebener Wert von Textfeld wert A
$_GET[‘wertb‘]; Eingegebener Wert von Textfeld wert B
22. ÜBUNG: TASCHENRECHNER
Erstellen Sie ein Taschenrechnerprogramm, welches zwei Textfelder
verarbeitet und mittels Operationen, das richtige Ergebnis liefert
Tipp: php.net/manual/de (Stand: 2013-05-03)
Vorlage: rechner.zip
22
23. FRAGEN ?
Was kann PHP nicht?
Ist es sicher?
Next: MySQLi…
23
24. MYSQLI - IMPROVED
Seit PHP 5.2.5
Der OOP Zugriff ist einheitlich, wodurch arbeiten im Team oder
an Fremdprojekten vereinfacht wird
Größere Geschwindigkeit - Laut Hersteller kann ein vielfaches an
Geschwindigkeit erreicht werden.
Verbesserte Sicherheit - Für die PHP-MySQL Verbindung wird
eine SSH-ähnliche Authentifizierung benutzt
24
25. MYSQLI - IMPROVED (2)
Das neue Binärprotokoll von MySQL wird verwendet. Dadurch
stehen mehr Funktionen zur Verfügung und die Verarbeitung ist
schneller und effizienter
Keine Standardverbindung und Prepared Statements erzwingen
eine saubere und somit sicherere Programmierung
Verbesserte Trace- und Debug-Funktionen
Multi-Queries werden unterstützt
25
28. MYSQLI – FETCH METHODEN
mysqli_result::fetch_array — Fetch a result row as an associative, a
numeric array, or both
$zeile['name']
mysqli_result::fetch_assoc — Fetch a result row as an associative array
mysqli_result::fetch_field — Returns the next field in the result set
mysqli_result::fetch_object — Returns the current row of a result set as an
object
$zeile->name
mysqli_result::fetch_row — Get a result row as an enumerated array
$zeile[0] , $zeile[1] …
28
29. ÜBUNG: ADRESSBUCH
Erstellen Sie ein Adressbuch, indem man Einträge machen kann
und anzeigen lassen kann.
Tipp: php.net/manual/de (Stand: 2013-05-03)
Vorlage: adress.zip
29
31. INSERT ÜBER PREPARE
31
s = String
i = Integer (Ganzzahl)
d = Double (Gleitkommazahl)
b = BLOB (Binary Large Object -
also eine binäre Datei)
$eintrag->bind_param( 'issd',
27, 'Werkzeug', 'Schraubenzieher', '39.99'
34. MULTIQUERY & SQL-INJECTION
Dem Multi Query kann man quasi unbegrenzt Anweisungen mitgeben,
die mit einer einzigen Anfrage abgearbeitet werden. Das ist wesentlich
performanter als mehrere kleine Anweisungen an die DB zu schicken.
mysqli_multi_query
$modbereich = $db->real_escape_string( 'Webdesign & Co.' );
mysqli_real_escape_string
Characters encoded are NUL (ASCII 0), n, r, , ', ",
34
35. VORTEILE
Die Geschwindigkeit ist wesentlich höher, vor allem bei
Massenabfragen
Multi-Queries
Prepared Statements
Unterstützung von Transaktionen (InnoDB)
SQL-Injections sind nahezu unmöglich
Der Quellcode ist besser strukturiert und die Abfragen sind
besser lesbar
PDO ?
35
und ist damit die am häufigsten verwendete Sprache zum Erstellen von Websites, Tendenz steigend. Zudem ist sie bei den meisten Webhostern vorinstalliert.