PHP Historie 1 EWA PHP Einführung, CMS Prinzipien 2 1995 Rasmus Lerdorf entwickelte in PERL Funktionen zur dynamischen Erstellung von Homepages: PHP P ersonal H ome P age, heute Hypertext Preprocessor (www.lerdorf.on.ca). Nov 1997 PHP 2.0.0 Jun 1998 PHP 3.0.0 Mai 2000 PHP 4.0.0 (erstes OO) Juli 2004 PHP 5.0.0 (Exceptions, SQLite, SimpleXML, DOM,...) Nov 2006 PHP 5.2.0 (Filter, Zip,...) Verbreitung Stellenanzeigen 3 TYPO3 Wallstreet Online Sueddeutsche.de 4 Suche für Deutschland (April 2007): monster.de: 545 jobpilot: 509 Onvista Ciao T-Online Deutsche Bank DPD E.ON Sixt Yahoo Lycos Quelle: http://www.dynamicwebpages.de/60.php-statistiken.php Ablauf CGI Ablauf Apache 5 Client <form> Request Formular Sendet Aufruf (führt aus) Web CGI = Schnittstellendefinition CGI Script erzeugt abfragen 6 <form> Request Formular Web PHP Modul Sendet Aufruf (führt aus) PHP Script erzeugt abfragen
Gedanken zu PHP Programmierstil 7 interpretiert Nicht typisiert Keine Namenräume Unicode ab Version 6 XML Open Source PHP SOAP Extensions OO Interfaces Abstrakte Klassen private,... Kon-/Destruktor Iterator Exif PDF Design Pattern 8 OO prozedural Ihre erste Programmiersprache war.. Prozedural oder Objektorientiert? Gehen Sie an Aufgaben eher.. Prozedural oder Objektorientiert? Sie denken/verwenden Entwurfsmuster.. Ja Nein Partnerarbeit PHP einbinden, Kommentare, Sprachbesonderheiten 9 Was sind typische Aufgaben für PHP (die mit /CSS/SSI nicht lösbar sind)? 10 echo 'Long Tags - empfohlen' /* für lange Kommentare */ // Einzeiler Stringverkettung erfolgt mit einem Punkt (.) und nicht mit + oder & Zugriff auf Klassenmethoden und -Member mit -> und nicht mit einem Punkt (Bsp: $file->getfilename()); Zugriff auf statische Methoden erfolgt mit :: Neben einem normalen Vergleich == gibt es auch einen typisierten Vergleich (===). pass by reference (Änderung gegenüber PHP 4) Konfiguration Variablen/Konstanten/include 11 PHP.ini (aktuelle Ini ist unter xampp\apache\bin) display_errors = On error_log = "C:\error.log" PHP Einstellung überprüfen mit phpinfo(); Apache (optional, falls Endung php unerwünscht) AddType application/x-httpd-php.htm.html 12 Variablen $name untypisiert, Deklaration nicht zwingend Typ der Variablen augrund letzter Zuweisung Konstanten: define("name",wert) Konstanten werden ohne $ über Namen angesprochen Datentypen: Boolean, Integer, Double, String, Array, Object DatentypenTyp-Casting möglich: $ganz=(int) "12.45"; funktioniert nicht mit Objekten! include "vars.php";include_once require "prepend.php";require_once
Arrays Kontrollstrukturen 13 array( 0 => array( "url" => "/", "title" => "Home" ),... $array = array("lastname", "email", "phone"); $comma_separated = implode(",", $array); echo $comma_separated; // lastname,email,phone 14 if - elseif - else for foreach while do - while switch break - continue try - catch - (kein finally) Klassen Iteratoren 15 interface protected / private / public / const extends (Vererbung) abstrakte Klassen Object cloning $bar = clone $foo; interface Fahren { public function schnell(); public function langsam(); class MeinAuto implements Fahren{ const ANZAHL_RAEDER = 4; function construct($baujahr, $marke, $km) {... function destruct() {...... class Bus extends MeinAuto { protected static $schlafplaetze = 4;... abstract class x { abstract public function y();... 16 class MyCollection implements IteratorAggregate { private $items = array(); private $count = 0; public function getiterator() { return new MyIterator($this->items); public function add($value) { $this->items[$this->count++] = $value; $coll = new MyCollection(); $coll->add('wert 1'); $coll->add('wert 2'); $coll->add('wert 3'); foreach ($coll as $key => $val) { echo "key/value: [$key -> $val]\n\n"; Quiz - Vorbereitung in Partnerarbeit Quiz 1/8 17 18 Wie können Kommentare innerhalb des PHP-Codes geschrieben werden? 1) // Kommentar 2) <!-- Kommentar --> 3) # Kommentar 4) /* Kommentar */ 5) {[ Kommentar ]
Quiz 2/8 Quiz 3/8 19 Was liefert $x = "1"; $y = 1; if ($x == $y) 1) wahr 2) falsch 20 Was wird ausgegeben? $gaensefuesse = " 'einfache' und \"mehrfache\"; Gänsefüßchen."; 1) Es wird ein Fehler ausgegeben, weil diese Zeile nicht korrekt ist. 2) einfache und mehrfache Gänsefüßchen. 3) 'einfache' und \"mehrfache\"; Gänsefüßchen. 4) 'einfache' und "mehrfache"; Gänsefüßchen. 5) Es wird gar nichts ausgegeben. Quiz 4/8 Quiz 5/8 21 Was wird ausgegeben? $a=5; echo ++$a; print $a; 1) 45 2) 55 3) 56 4) 66 5) 67 22 Wie muss der foreach-befehl aussehen, um ein assoziatives Array zu durchlaufen? 1) foreach ($array as $key => $value) { print "$key -> $value<br>"; 2) foreach (array_keys($array) as $key) { print $key." -> ".$array[$key]."<br>"; 3) foreach ($array = $key => $value) { print "$key -> $value<br>"; Quiz 6/8 Quiz 7/8 23 Wie geben Sie die Anzahl der Werte des Arrays $gemuese aus? 1) print count($gemuese); 2) echo sizeof($gemuese); 3) $gemuese -> count(); 4) $gemuese.count(); 5) $gemuese::count(); 24 Welche OO-Möglichkeiten unterstützt PHP5x? 1) Mehrfachvererbung (class x extends y,z) 2) abstrakte Klassen 3) keine 4) einfache Vererbung 5) Interfaces
Quiz 8/8 Formulare 25 Was liefert folgender Code class Test { $a = new Test(); $b = $a; if ($a === $b) { print "identisch"; else { print "ungleich"; a) identisch b) ungleich c) Fehlermeldung 26 <form action="example04.php" method="post" > Alter: <input name="age" size="2"> <input type="submit" name="submit" value="go"> </form> Bis Version 5.2.0 Ab 5.2: Filter 27 Sie sind echo $_POST[ age ]; Jahre alt. Was halten Sie von: AUTSCH!! include($_get['filename']); mysql_query("insert INTO table (field_one, field_two) VALUES ({$_POST['var1'], {$_POST['var2'])"; 28 if (!filter_has_var(input_post, 'submit')) { echo na na na"; $age = filter_input(input_post, 'age', FILTER_VALIDATE_INT); if (is_null($age)) { echo Bitte verraten Sie uns Ihr Alter.<br />"; elseif ($age === FALSE) { echo Bitte geben Sie Ihr Alter in Jahren (ganze Zahl) an.<br />"; else { echo Sie sind $age Jahre alt.<br/>"; Filter Filter 29 <form action="example07.php" method="post" > Name: <input name="name" size="50"><br /> Email: <input name="email" size="50"><br /> Homepage: <input name="homepage" size="50"><br /> Age: <input name="age" size="4"><br /> Income: <input name="income" size="50"><br /> Your two favourites languages: <select name="favourites[]" size="6" multiple> <option value= java">java</option>.. <option value="php">php</option> </select><br /> <input type="submit" name="submit" value="go"> </form> 30 $defs = array( desinfizieren 'name'=>array('filter'=>filter_sanitize_string, 'flags' => FILTER_FLAG_ENCODE_HIGH), 'email'=>filter_validate_email, 'homepage'=>array('filter'=>filter_validate_url, 'flags' => FILTER_FLAG_SCHEME_REQUIRED), 'age'=>array( 'filter' => FILTER_VALIDATE_INT, 'options'=> array('min_range'=>7, 'max_range'=>77)), 'income'=> FILTER_VALIDATE_FLOAT, 'favourites'=> array( 'filter' => FILTER_SANITIZE_STRING, 'flags' => FILTER_REQUIRE_ARRAY),); $input = filter_input_array(input_post, $defs); Mehr als 1! if ($input['age'] === FALSE) {exit( Nicht zwischen 7 and 77.");
CMS - Definition CMS - Anforderungen 31 "Softwaresystem für das Administrieren von Webinhalten mit Unterstützung des Erstellungsprozesses basierend auf der Trennung von Inhalten und Struktur". Demo Typo Verstehen Sie CMSSimple und codieren Sie es besser ;-) 32 Layout-Management Content Management Strukturmanagement Benutzer- und Rollenverwaltung Personalisierung Suchmechanismen In der Datenbank Systemübergreifend Internetrecherche Volltextsuche Unscharfe Suche (Fuzzy Search) Speicherung von Suchergebnissen Speicherung von Suchanfragen Prozessunterstützung / Workflow Modellierung von Arbeitsabläufen Simulation von Arbeitsabläufen Mehrsprachigkeit Statistik User Tracking / Profilgenerierun Redaktionsprozess Freigabemechanismen / QA Sperren Kategorisierung von Inhalten Metadaten / Taxonomien Flexibel erweiterbar CMS Rollen Zusammenfassung und Ausblick 33 34 PHP ist eine ausgereifte Sprache kann OO kann prozedural Filter sind fein will ich lernen CMS Nächste Woche: Navigation allgemein und mit PHP - Minitest