Programmieren von Webinformationssystemen Nikolaus Krismer Databases and Information Systems (DBIS) Institute of Computer Science University of Innsbruck dbis-informatik.uibk.ac.at 1
PHP Ursprünglich: Personal Homepage Tools Rekursives Akronym: PHP Hypertext Preprocessor Schwach typisierte Skriptsprache Syntax an C angelehnt Code kann in HTML eingebettet werden <?php echo "Hello World";?> Objektorientierter & Prozeduraler Stil http://php.net/manual/de/langref.php 2
* Der TIOBE-Index ist ein wenig mit Vorsicht zu genießen. Siehe dazu Kapitel Kritik auf Wikipedia 3
Variablen Variablenzuweisung $variable_identifier = Wert Beispiel: $x = 5; $x = "Hallo"; Variablendeklaration: erfolgt automatisch bei erster Verwendung bzw. Zuweisung Typ wird automatisch festgestellt 4
Arrays $myarray = array(1,2,3,4,5,9,234); Zugriff auf Array: echo $myarray[0]; $myarray[3] = 15; Assoziative Arrays möglich: $myarray['name'] = 'Wolfgang'; $myarray['address'] = 'Uni IBK'; oder $myarray = array('name' => 'Wolfgang', 'address' => 'Uni IBK'); 5
Operatoren & Kontrollstrukturen Operatoren angelehnt an C + - ++ -- * / + == String Konkatenationsoperator:. (Punkt) Kontrollstrukturen if ($x==5) { echo "x ist 5"; else { echo "x ist nicht 5, sondern $x"; 6
Kontrollstrukturen cont. Sonstige übliche Kontrollstrukturen switch (break) for while (do-while) elseif break / continue... http://de.php.net/manual/de/language.control-structure s.php 7
Funktionen Beispiel einer Funktion: function fun_identifier($param1, $param2) { $sum = $param1 + $param2; return $sum; Variablen nur innerhalb Funktion gültig Zugriff auf globale Variablen über Array $GLOBALS $globvar1 = 10; function globtest() { return $GLOBALS['globVar1']; 8
Objektorientierung Beispiel einer Klasse class Animal { public $name; protected $weight; private $friends; public function getfriends() { return $this >friends; //voller Zugriff von //außen //Zugriff bei Vererbung //Zugriff nur innerhalb //Klasse Zugriff aus Objekt innerhalb Klasse über $this 9
Objektorientierung cont. Vererbung class Tiger extends Animal {... Abstrakte Klassen (seit PHP 5.0) abstract class AbstrakteKlasse { // Methode muss implementiert werden abstract protected function getinfo(); // gemeinsam genutzte Methode public function getsinnfrei() { return 0; 10
Objektorientierung cont. Traits (ab PHP 5.4) trait getinfotrait { function getinfo() {... class myclass extends otherclass { use getinfotrait; Interfaces (Änderung in PHP 5.3.9) interface mytemplate { public function getinfo($param1); 11
Besondere Methoden (Magic Methods) Methoden beginnend mit haben spezielles Verhalten Konstruktur/Destruktor: construct() destruct() tostring() definiert Verhalten von Klasse als String Wenn unerlaubter Zugriff auf Member (oder Member in Klasse nicht verfügbar) set($name, $value) get($name) Wenn unerlaubter Zugriff auf Methode (oder Methode in Klasse nicht verfügbar) call($name, array $arguments) 12
Namespaces Seit PHP 5.3 namespace Foo\Bar; class myclass { ; class Foo\Bar\myClass { // selbe Bedeutung $c = new myclass(); // Klasse im aktuellen NS $global_c = new \myclass(); // globale Klasse 13
Closures $numbers = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]; $add = 2; $f = function($i) use ($add) { return $i + $add; ; $mapped = array_map($f, $numbers); echo implode(" ",$mapped); // Output: 3 4 5 6 7 8 9 10 11 14
Verwendung von Klassen class Animal { public $name; class Tiger extends Animal { public function makenoise() { return 'uaahhh'; $mytiger = new Tiger(); $mytiger >name = 'Lion'; echo $mytiger >makenoise(); 15
Exceptions function bad() { throw new Exception('Some Error'); try { bad(); catch (Exception $e) { echo 'Caught exception: '. $e getmessage(); 16
Best Practice Eine Klasse pro Datei (wie bei Java) Einbinden von Dateien durch: include/require bzw _once include_once(filename.php) require_once(filename.php) Dateibenennung nach Klassenname (wie bei Java) Keine Mischung Prozedural & OO in einer Datei 17
Dynamische Webseiten Reagieren auf Benutzer bzw. dessen Eingaben Geben angepasste Seiten (HTML) Code aus, abhängig von Eingaben bzw. anderen Bedingungen (z.b. Typ des Browser, Zeit, Wetter) Grundlegende Möglichkeit Eingaben oder andere Werte zu transportieren GET: über URI suche.php?plz=6020 POST: innerhalb HTTP Request (auch binäre Daten wie z.b. Bilder) 18
Übermittelte Werte in PHP verwenden Vordefinierte Variablen $_SERVER Umgebungsvariablen (Path,...) $_GET Variablen von GET-Request $_POST Variablen von POST-Request $_FILES Daten bei Datei-Upload... http://.../index.php?var1=5&var2=hallo <?php echo $_GET['var1'].$_GET['var2']; // Output: 5hallo?> 19
Einschub: HTML-Formulare 20
Session Management Seit PHP 4 eingebautes Session-Management Identifiziert Benutzer um HTTP-Stateless zu überwinden und Benutzer wiederzuerkennen session_start(); if (!isset($_session['start'])) { $_SESSION['start'] = time(); echo 'Startzeit der Session: '. $_SESSION['start']; 21
Einschub: HTTP - Cookies 22
PHP 7 Release noch 2015 2x schneller Operatoren: <=>,?? <=>: ($a < $b)? 1 : (($a > $b)? 1 : 0)??: isset($b)? $b : "default"; Scalar Type Hints / Return Type Hints https://www.digitalocean.com/company/blog/getting -ready-for-php-7/ https://www.zend.com/en/resources/php-7 23
Hilfreiche Links http://de.selfhtml.org/ (ausführlich, aber veraltet) http://www.php.net (sehr gute Doku + Comments) http://www.google.at ;) 24
Assignment 2 MyBlog Anzeigen von Beiträgen in Liste (mit Link zur Detail-Seite index.php? titel=beitragstitel, die dann angezeigt wird) Erstellen, Ändern, Löschen von Beiträgen Formular: Titel (eindeutig), Beitrag, Keywords Weitere Felder: Autor, Erstellungszeit (evtl. + Änderungszeit) Speicherung der Beiträgen in Session (Session soll auch nach Browser-Ende erhalten bleiben) keine Libraries und/oder Frameworks! (HTML, JS, CSS, PHP, etc...) 25