Introductie en even voorstellen

Vergelijkbare documenten
Kleine cursus PHP5. Auteur: Raymond Moesker

Hoofdstuk 6. PHP Data Objects. Cursus PHP & MySQL Groep D

et Zend Framework bestaat volledig uit objectgeoriënteerde

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Programmeren in Java 3

Zelftest Programmeren in Java

Modelleren en Programmeren

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

Vakgroep CW KAHO Sint-Lieven

Modelleren en Programmeren

Java. Basissyllabus. Egon Pas

Sparse columns in SQL server 2008

Design patterns Startbijeenkomst

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Maak een pivot uit een Generic.List

Abstracte klassen & Interfaces

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Object Oriented Programming

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn.

Modulewijzer Tirdat01

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Modelleren en Programmeren

Databases - Inleiding

Introductie in C++ Jan van Rijn. September 2013

SQL manipulatietaal. We kunnen er data mee toevoegen, wijzigen en verwijderen uit een database.

Extra voorbeelden. 1 Objectenhierarchie. 2 Kalender

Een unit test is geen integratie test. Niet het hele systeem, maar onderdelen van een systeem worden getest.

INFITT01 - Internettechnologie WEEK 8

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Scala. Korte introductie. Sylvia Stuurman

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

8. Koppeling met een database

NAAM: Programmeren 1 Examen 29/08/2012

IMP Uitwerking week 13

Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Elementary Data Structures 3

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A

Ingebouwde klassen & methodes

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

NHibernate als ORM oplossing

MINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara

Programmeren. Cursus Python

In een klassendiagram worden klassen beschreven in termen

Modulewijzer tirprog02/infprg01, programmeren in Java 2

De MySQL C API. Variabelen in C Functies in C Pointers in C

Programmeren (1) Examen NAAM:

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Tentamen Imperatief Programmeren

Programmeren in C# Interfaces. Hoofdstuk 23

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, uur

Datastructuren Werkcollege Intro

NAAM: Programmeren 1 Examen 21/01/2011

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

Een Data Driven toepassing op basis van Visual Objects en SQL Server

Datastructuren en algoritmen

VI. Klassen en objecten

Secure Application Roles

Ontwerp van Informatiesystemen

vbg.vbnet.beginner Foutafhandeling binnen Visual Basic.NET

Aan het eind van deze lesbrief wordt uitgelegd wat het nut van OOP is en vind je een aantal oefenopdrachten.

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Programmeren in Java les 3

Overerving & Polymorfisme

2 Specificatie In deze tabel staat voor welk crebotraject de leereenheid is gemaakt Crebotraject code: 95311

PHP & MySQL. Studievaardigheden Frank Takes (ftakes@liacs.nl) LIACS, Universiteit Leiden

HvA Instituut voor Interactieve Media ActionScript 3.0

1 Een beetje theorie vooraf 1. Wat is een programma? 2 Hoe maakt u een programma? 3 IL-code en JIT-compiler 5

Javascript oefenblad 1

Modelleren en Programmeren

WCF claims-based authorization

Hoe bouw ik een component? Drs. Arjan Burger

Programmeren in Java 3

Lessen Java: Reeks 3. David Blinder Jan G. Cornelis

ASP.NET Test Jan Van Ryckeghem

In de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal.

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

Deel 1 : Gesloten Boek

In deze query is 'alfki' een constante. Met deze query wordt telkens hetzelfde record uit de tabel Customers opgeroepen.

Een stoomcursus door Edgar de Graaf, november 2006

OBJECT SPAGHETTI : PATTERNS BIEDEN UITKOMST? Wat is het probleem nou eigenlijk? public class CoffeeDrinker { private CoffeeProducer mycoffeeproducer;

Transcriptie:

Introductie en even voorstellen Onlangs is PHP5 uitgekomen. PHP5 is een grote stap voorwaards voor iedereen die met deze populaire programmeertaal werkt. In deze presentatie bekijken we de belangrijkste nieuwe mogelijkheden die PHP5 biedt. Senior Web Developer Freelance docent Masterclass PHP

Onderwerpen in deze presentatie De Zend Engine 2.0: OO programmeren naar een hoger niveau getild. DOM XML: nu DOM Level 2 compliant SimpleXML: simpel met XML werken SQLite: SQL zonder database server Einde

De Zend 2.0 engine

Zend Engine 2.0 private en protected members private en protected methods abstract classes en methods interfaces over constructors en destructors exception handling overige nieuwe mogelijkheden

Zend Engine 2.0: private members Een member variabele was in PHP4 altijd public en dus overal in de code op te vragen of te wijzingen. PHP5 introduceert de keywords private en protected om variabelen beter af te schermen. Class clsdemo { private $m_stekst = "hallo"; function printtekst() { return $this->m_stekst; $objdemo = new clsdemo(); echo $objdemo->printtekst(); echo $objdemo->m_stekst; De juiste manier om de member $m_stekst te tonen is via een access method. Direct aanroepen via $object->member geeft: Fatal error: Cannot access private property clsdemo::$m_stekst in /var/www/ demo/test.php on line 10

Zend Engine 2.0: protected members Protected members zijn alleen toegankelijk vanuit extending classes. Private members zijn niet gedefiniëerd in extending classes. 01: Class clsdemo { 02: protected $m_stekst = "hallo"; 03: private $m_sprive = "dit is geheim"; 04: function printprive() { 05: echo $this->m_sprive; 06: 07: 08: Class clsdemochild extends clsdemo { 09: function printvars() { 10: echo $this->m_stekst."\n"; 11: echo $this->m_sprive; 12: echo clsdemo::printprive()."\n"; 13: 14: 15: $objdemo = new clsdemochild(); 16: echo $objdemo->printvars(); 17: echo $objdemo->m_stekst; 18: echo $objdemo->m_sprive; 10: print hallo : protected member wordt overerfd. 11: print NIETS: private member wordt niet overerfd. 12: print dit is geheim : toegang via access method van de parent. 17: Error, 18: NIETS

Zend Engine 2.0: private methods Private methods kunnen ALLEEN van binnenuit de class zelf aangeroepen worden. Elke andere denkbare aanroep resulteerd in een error. Class clsdemo { private function privatemethod() { return "private method gebruikt\n"; function publicmethod() { echo $this->privatemethod(); $objdemo = new clsdemo(); echo $objdemo->privatemethod() // FAALT echo $objdemo->publicmethod() // SLAAGT Class clsextend extends clsdemo { function printout() { return $this->privatemethod(); // FAALT bij aanroep function printout2() { return clsdemo::privatemethod(); // FAALT bij aanroep function printout3() { return $this->publicmethod(); // GOED

Zend Engine 2.0: protected methods Protected methods kunnen alleen binnen children van de class waarbinnen ze gedefiniëerd zijn worden aangeroepen. Class clsdemo { protected function protectedmethod() { return "protected method gebruikt"; Class clsextends extends clsdemo { function printout() { return $this->protectedmethod(); Goed: aanroep door child van clsdemo $objdemo = new clsextends(); echo $objdemo->printout(); Fout: aanroep van buitenaf. geeft errormelding. $objdemo2 = new clsdemo(); echo $objdemo2->protectedmethod();

Zend Engine 2.0: abstract classes Een abstract class is een class die slechts gedeeltelijk is ingevuld met code. Ze kunnen NIET geïnstantieerd worden maar moeten verder ingevuld worden door een extending class. abstract Class clsframe { abstract public function sayhi(); Class clsimplemented extends clsframe { public function sayhi() { return "Hi there!"; $objtest = new clsimplemented(); echo $objtest->sayhi(); Fout: instantiatie van een abstract class. $objtest = new clsframe(); Classes met 1 of meer abstract methods MOETEN zelf ook abstract gedeclareerd worden.

Zend Engine 2.0: interfaces PHP5 introduceert interfaces. Een interface is een set van lege method definitions. Classes kunnen een of meerdere interfaces implementeren. Class clsdemo implements itfdemo { public function sayhi() { return "Hi!"; public function saybye() { return "Bye!"; interface itfdemo { public function sayhi(); public function saybye(); Class clsdemo implements itfdemo { public function sayhi() { return "Hi!"; abstract Class clsdemo implements itfdemo { public function sayhi() { return "Hi!"; Class clsextend extends clsdemo {.... FOUT: niet alles van interface is aanwezig. GOED: onvolledige class abstract declareren en later extenden.

Zend Engine 2.0: constructors PHP5 heeft uniforme constructors die niet meer de naam van de class dragen maar altijd hetzelfde heten. Nieuw in PHP5 zijn de destructors en de mogelijkheid objecten te vernietigen. Class clsdemo { function construct() { echo "hallo wereld"; function destruct() { echo "vaarwel wrede wereld"; Bij instantiatie wordt de constructor aangeroepen. De destructor als het script ophoudt te runnen OF bij een expliciete vernietiging: $objdemo = new clsdemo(); unset($objdemo); // sterf!!.... // code na de dood van.. // $objdemo

Zend Engine 2.0: exception handling Nieuw in PHP5: exceptions. Eindelijk een degelijke manier om fouten op te vangen en af te handelen. Er is een ingebouwde exception class met de volgende methods: construct() constructor (argumenten: errorstring, optionele int) getmessage() retourneert error message (boven gegeven) getcode() retourneert de (optioneel meegegeven) errorcode getfile() pad naar file waarin de exception gegenereerd werd getline() regelnummer waarin de exception gegenereerd werd gettrace() array met stack trace informatie over de fout gettraceasstring() zelfde als gettrace() maar nu als string

Zend Engine 2.0: exception handling Een exception kan in principe gemaakt worden op de standaard manier om een object aan te maken maar beter is het keyword throw te gebruiken: $nvalue = -1; if($nvalue < 0) { throw new exception ( onder 0 );.. // vervolgcode Fatal error: Uncaught exception 'Exception' with message 'waarde onder 0' in /var/www/demo/demo.php:4 Stack trace: #0 {main thrown in /var/www/demo/demo.php on line 4 throw forceert een Fatal error! We kunnen ervoor zorgen dat onze code bij bepaalde fouten niet door executeert ondanks dat PHP zelf geen fout ziet.

Zend Engine 2.0: exception handling In plaats van de executie te laten stoppen kunnen we ook fouten afvangen en ernaar handelen. class clskanfoutgaan { function construct($narg) { if($narg < 0) throw new exception("onder 0"); try { $objditgaatfout = new clskanfoutgaan(-1); catch (Exception $e) { echo "het ging fout, de melding was: ".$e->getmessage(); We kunnen de fout dus vangen met het catch statement. Wanneer we hem gevangen hebben kunnen we de code daarna door laten lopen. Binnen het try block wordt code NA optreden van de exception NIET meer uitgevoerd.

Zend Engine 2.0: exception handling We kunnen een onbeperkt aantal soorten fouten afvangen met try-catch constructies: class belowzeroexception extends Exception {; class abovenineexception extends Exception {; class clskanfoutgaan { function construct($narg) { if($narg < 0) throw new belowzeroexception("onder 0"); if($narg > 9) throw new abovenineexception("boven 9"); try { $objditgaatfout = new clskanfoutgaan(-1); catch (belowzeroexception $e) { echo "het ging fout, de melding was: ".$e->getmessage(); catch (abovenineexception $e) { echo "het ging op een andere manier fout. de melding was: ".$e->getmessage();

Zend Engine 2.0: overige nieuwe mogelijkheden Static methods instanceof() (check of een object een instance van een bepaalde class is) tostring() METHOD constante final methods reflection API

XML in PHP5

XML in PHP PHP5 biedt nu drie verschillende manieren om met XML om te gaan: SimpleXML SAX DOM SAX (XML lezen/ verwerken) DOM (XML lezen, wijzigen en genereren) SimpleXML (eenvoudiger manier om XML te lezen, wijzigen en genereren, eigen PHP5 standaard)

W3C DOM Level 2 XML interface XML: geen buzzword meer maar een breed geaccepteerde standaard. DOMXML in PHP 4 experimenteel en buggy PHP5 DOM interface 100% W3C DOM Level 2 compliant Performance sterk verbeterd PHP5 DOM classes kunnen door de programmeur uitgebreid worden

W3C DOM Level 2 XML interface PHP DOM XML Code voorbeeld. XML maken: $acontentexample = array("piet" => "Janssen", "Marie" => "de Boer", "Frits" => "Peters", "Carla" => "de Groot"); $objdom = new DOMDocument(); $objrootelement = $objdom- >createelement("medewerkers"); foreach($acontentexample as $skey => $svalue) { echo $sthisone; $objpersoonelement = $objdom- >createelement("persoon"); $objrootelement->appendchild($objpersoonelement); $objvoornaamelement = $objdom- >createelement("voornaam"); $objvoornaamelement->appendchild($objdom- >createtextnode($skey)); $objpersoonelement- >appendchild($objvoornaamelement); $objachternaamelement = $objdom- >createelement("achternaam"); $objachternaamelement->appendchild($objdom- >createtextnode($svalue)); $objpersoonelement- >appendchild($objachternaamelement); $objdom->appendchild($objrootelement); header("content-type:text/xml"); echo $objdom->savexml(); De PHP5 DOM XML interface biedt ons de mogelijkheid op een gestructureerde en 100% object georiënteerde manier met XML documentstructuren om te gaan, zowel bij lezen, wijzigen als genereren van XML documenten.

W3C DOM Level 2 XML interface Documentatie momenteel nog schaars Zend.com PHP Manual MasterClass PHP5 W3C Dom Level 2 spec documentatie ALLE Dom Level 2 classes met bijbehorende methods en members zijn in PHP5 geïmplementeerd. De W3C spec kan dus naast PHP documentatie als naslagwerk gebruikt worden!

W3C DOM XML : XSLT XSLT engine geen Sablotron maar libxml2 net als het XML DOM interface XSL stylesheets als DOM objecten XSL stylesheets kunnen in memory worden vastgehouden voor hergebruik Performance verbeterd Samen met DOM XML en SimpleXML een robuuste en uitgebreide XML/XSLT engine

SimpleXML

SimpleXML: XML op zijn Simpel SimpleXML is een nieuwe API binnen PHP5 Gebouwd op libxml2 evenals de DOM implementatie Eenvoudige representatie en manipulatie van XML documenten Representatie in de vorm van een multidimensionale structuur van arrays en objecten Makkelijk switchen tussen DOM XML en SimpleXML al naar gelang wat het handigst werkt

SimpleXML: XML op zijn Simpel SimpleXML is, zoals de naam doet vermoeden, simpel. Althans een stuk simpeler dan DOM XML. <?xml version="1.0"?> <bibliotheek> <plank id="literatuur"> <boek> <titel>de Aanslag</titel> <schrijver>harry Mulisch</schrijver> </boek> <boek> <titel>kort Amerikaans</titel> <schrijver>jan Wolkers</schrijver> </boek> </plank> </bibliotheek > $bibliotheek = simplexml_load_file('boeken.xml'); foreach ($bibliotheek->plank as $plank) { printf("plank %s\n", $plank['id']); foreach ($plank->boek as $boek) { printf("titel: %s\n", $boek->titel); printf("schrijver: %s\n", $boek- >schrijver); Een SimpleXML object kan behandeld worden als collectie van arrays en objecten.

SimpleXML: naar DOM XML en weer terug SimpleXML objecten kunnen eenvoudig omgezet worden naar DOM XML en vice versa. // van DOM XML naar SimpleXML $objsimplexml = simplexml_import_dom($objdomxml); // van SimpleXML naar DOM XML $objdomxml = new DOMDocument(); $objdomxml->loadxml($objsimplexml->asxml());

SQLite

SQLite Nieuw DBMS in PHP5 zonder externe database server (bv. MySQL, Postgres, etc.) File based Zeer uitgebreide SQL mogelijkheden Goede performance Goed voor kleine tot middelgrote applicaties Aanwezig in de PHP5 core dus praktisch altijd beschikbaar in elke PHP5 omgeving. Procedurele EN OO interface

SQLite SQLite voorbeeldcode (procedureel) Rows $db = sqlite_open("db.sqlite"); // insert sample data sqlite_query($db, "INSERT INTO leden (naam) VALUES ('Marco')"); sqlite_query($db, "INSERT INTO leden (naam) VALUES ('Wouter')"); $result = sqlite_query($db, "SELECT * FROM leden"); while ($row = sqlite_fetch_array($result)) { print_r($row); sqlite_close($db); Array ( [0] => 1 [id] => 1 [1] => Marco [naam] => Marco ) Array ( [0] => 2 [id] => 2 [1] => Wouter [naam] => Wouter ) Procedurele code praktisch gelijk aan mysql interface die we al kennen.

SQLite SQLite voorbeeld 2 (memory DB, OO interface) $db = new SQLiteDatabase(":memory:"); $db->query("begin; CREATE TABLE leden(id INTEGER PRIMARY KEY, naam CHAR(255)); INSERT INTO foo (naam) VALUES('Marco'); INSERT INTO foo (naam) VALUES('Wouter'); COMMIT;"); $result = $db->query("select * FROM leden"); while ($result->valid()) { $row = $result->current(); print_r($row); $result->next(); SQLite heeft een OO interface zodat het mooi aansluit bij OO projecten in PHP. We zien tevens in het voorbeeld dat ook technieken als transacties en in-memory databases geen probleem zijn voor SQLite.

SQLite voor- en nadelen Makkelijk portable tussen servers (geen database benodigd) Performt zeer goed in systemen met voornamelijk read operaties. Zeer krachtige API, zowel OO als procedureel Niet geschikt voor grote applicaties met veel write operaties Niet schaalbaar (meerdere DB servers)

Einde vragen?