‘Inleiding objectgeoriënteerd programmeren met PHP’ ‘Inleiding’ Live webcollege ‘Inleiding objectgeoriënteerd programmeren met PHP’ ‘Inleiding’ 1 1
Welkom 2 2
Programma Adobe Connect Afsluiting Programma Adobe Connect Vragen en antwoorden-venster Stel hier je technische vragen en inhoudelijke vragen aan de docent. Chatvenster Praat hier met de andere deelnemers. Statusicoon Reageer hiermee op stellingen en vragen van de docent. Opties statusicoon.
Wie ben ik? Peter Anema Achtergrond: TU Delft, 30 jaar werkzaam in de medische IT en al 40 jaar aan het programmeren. Docent bij LOI klassikaal, m.n. IT ontwerpen en programmeren. 4 4
Opbouw live webcollege Onderdeel 1 – Best practices Vragenblok onderdeel 1 Onderdeel 2 – OOP Vragenblok onderdeel 2 Onderdeel 3 – Design patterns Vragenblok onderdeel 3 3 x 10 tot 15 minuten 5 5
Wie herkent zich hierin? De code achter mijn pagina's is in de loop van de tijd gegroeid tot honderden regels. 6 6
Onderdeel 1 - Best practices Er is niet één best practice, maar wees consistent. 7 7
Codeer volgens een standaard Framework Interop Group PSR-1 – Basic Coding Standard. PSR-2 – Coding Style Guide. PSR-4 – Autoloader. 8 8
Naamgeving Naamgeving in CamelCase. Variabelen en methoden beginnen met een kleine letter. Klassen beginnen met een hoofdletter. <?php class Persoon { // Properties private $naam; // Methods public function vertelOverJezelf() { print "Ik ben " . $this->naam; } 9 9
Indenting en brackets Vier spaties inspringen voor ieder code block. Brackets op nieuwe regel bij class en function. Brackets aan eind van de regel bij control statements. <?php function printEvenGetallen() { for ($i = 0; $i < 10; $i++) { if ($i % 2 == 0) { print i; } 10 10
Files Iedere klasse gaat in een file. persoon.php 11 11 <?php class Persoon { // Properties private $naam; // Methods public function vertelOverJezelf() print "Ik ben " . $this->naam; } <?php require_once('persoon.php'); 11 11
Visibility Specificeer altijd de visibility. Private Public Protected <?php class Persoon { // Properties private $naam; // Methods public function vertelOverJezelf() print "Ik ben " . $this->naam; } Private Public Protected 12 12
Commentaar // inline comments /* */ block comments /** */ DocBlock Niet te weinig Niet te veel Toegevoegde waarde Refactor <?php /** * Dit is een DocBlock voor de * functie vertelOverJezelf * * @param string $naam Jouw naam * @return string */ function vertelOverJezelf($naam) { // Concatenate greeting and name return "Ik ben " . $naam; } 13 13
Dan HTML met minimale PHP. PHP en HTML <?php $content = doSomething(); // complex calculations ?> <!DOCTYPE HTML> <html> <title>Demo</Title> <body> <?php echo $content; ?> <div id="some_div">Content</div> </body> </html> PHP-code eerst. Dan HTML met minimale PHP. 14 14
Vragen? 15 15
Scheiden van verantwoordelijkheden Blok 2 – Object-oriented programming (OOP) Scheiden van verantwoordelijkheden Deel 1 Deel 2 Deel 4 Deel 3 16 16
Klasse Naam Eigenschappen & methodes Naam Properties Methods 17 17
Klasse als blauwdruk 18 18 Persoon naam geslacht geboortedatum opleiding vertelOverJezelf() public vertelOverJezelf() { print "Ik ben " . $this->naam; } 18 18
Objecten instantiëren Ik ben Sly Ik ben Guido Ik ben Liberty 19 19
In PHP 20 20 <?php class Persoon { // Properties private $naam; private $geslacht; private $geboortedatum; private $opleiding; // Constructor public __construct($naam) { $this->naam = $naam; } // Methods public vertelOverJezelf() { print "Ik ben " . $this->naam; <?php // Instantiation $persoon1 = new Persoon("Guido"); $persoon2 = new Persoon("Sly"); $persoon3 = new Persoon("Liberty"); // Invoke methodes $persoon1->vertelOverJezelf(); $persoon2->vertelOverJezelf(); $persoon3->vertelOverJezelf(); Ik ben Guido Ik ben Sly Ik ben Liberty 20 20
Kaartspel poker 21 21
Kaartspel poker PokerHand Hand Kaart Dek 22 22
Klassen – Kaartspel poker Dek Hand PokerHand Kleur Rang Kaarten Kaarten Hand Deel Schud VoegKaartenToe BesteCombinatie 23 23
UML – Kaartspel poker 24 24
Vragen? 25 25
Onderdeel 3 – Design patterns Code smell & anti-patterns repeating yourself DRY switch $type inheritance magic numbers CONSTANTS God object Refactor Accidental complexity KISS
Wie heeft zoiets weleens gedaan? 27 27
Factory pattern 28 28 /* Car */ abstract class Car { public abstract function getType(); } class Sedan extends Car { public function getType() { return 'Sedan'; /* Factory */ interface CarFactory { public function makeCar(); class SedanFactory implements CarFactory { public function makeCar() { return new Sedan(); $factory = new SedanFactory(); $car = $factory->makeCar(); print $car->getType(); 28 28
Observer pattern abonneren op veranderingen 29 29
Iterator pattern Vaak zijn classes een vorm van collectie. Met een iterator pattern kun je deze classes gebruiken in foreach. Door het implementeren van enkele methoden: next() en hasNext() 30 30
Vragen? 31 31
Evaluatie Eerst enkele enquêtevragen en dan ontvangt u nog een extraatje.
Afronding Cheat sheet ‘Van scripting naar object-oriented programming met PHP’. 33 33