SlideShare a Scribd company logo
1 of 35
Download to read offline
Object Oriented Programming
         voor webapplicaties




         Door Edwin Vlieg
•   Waarom OOP?

•   Basis uitleg over OOP

•   Design Patterns

•   ActiveRecord

•   Model View Controller

•   Extra informatie

•   Vragen
OOP


•   Object Oriented Programming
•   Alle code in classes
•   Classes hebben verantwoordelijkheden
•   Verantwoordelijkheden staan in het contract
•   Classes kunnen een Design Pattern vormen
•   PHP5 heeft een goede ondersteuning voor OOP
Waarom OOP?


•   Structuur in je code
•   Herbruikbaarheid
•   Leesbaarheid
•   Sneller kunnen ontwikkelen
•   Design patterns
•   Communicatie met collega’s
Maar ook in webapplicaties??


    Ja, want:
•   die hebben ook recht op structuur,
•   PHP laat je altijd alles opnieuw doen,
•   er zijn goede design patterns voor.


    Waarschuwing:
•   OOP != procedurele code in classes gooien
•   OOP == een denkwijze
1. Waarom OOP?

2. Basis uitleg over OOP

3. Design Patterns

4. ActiveRecord

5. Model View Controller

6. Extra informatie

7. Vragen
Classes


Class is een definitie van functionaliteit door middel van:
 •   Eigenschappen: $bLustBier
 •   Queries: getNaam()
 •   Commando’s: setSchoenMaat($iSize)


Eigenschappen zijn de ‘oude’ variabelen. Queries en commando’s zijn de
‘oude’ functies, in OOP context vaak methoden genoemd.
<?php
class Persoon {
   private $sNaam;

     public function __construct($sNaam){
        $this->sNaam = $sNaam;
     }
     public function getNaam(){
        return $this->sNaam;
     }
}

class PHPFreak extends Persoon {
   private $bLustBier;
   private $iSchoenMaat;

     public function __construct($sNaam){
        parent::__construct($sNaam);
        $this->bLustBier = true;
     }

     public function setSchoenMaat($iSize){
        if($iSize < 45){
           throw new Exception(quot;Dit kan geen PHPFreak zijn!quot;);
        }
        $this->iSchoenMaat = $iSize;
     }

}
?>
Overerving


•   Door middel van overerving kan je in een overervende class gebruik
    maken van de functionaliteit van de basis class.
•   In veel gevallen een generalisatie van een class:
    Persoon > PHPFreak
    Controller > HomeController
•   Je specificeert extra eigenschappen en functionaliteit die alleen voor die
    generalisatie gelden (en dus niet voor de basis klasse)
<?php
class Persoon {
   private $sNaam;

     public function __construct($sNaam){
        $this->sNaam = $sNaam;
     }
     public function getNaam(){
        return $this->sNaam;
     }
}

class PHPFreak extends Persoon {
   private $bLustBier;
   private $iSchoenMaat;

     public function __construct($sNaam){
        parent::__construct($sNaam);
        $this->bLustBier = true;
     }

     // ...
     public function setSchoenMaat($iSize){
        // ...
        $this->iSchoenMaat = $iSize;
     }

}
?>
Design by Contract


•   Classen geven een contract: “als jij mij zo gebruikt, dan zal ik dit voor je
    regelen”
•   Via de commentaar-regels kan je zien wat het contract van een class of
    methode is.
•   Een class kan exceptions gooien als jij je niet aan het contract houdt.
•   Eigenschappen vaak private om contract te kunnen uitvoeren.
<?php

class PHPFreak extends Persoon {

     private $iSchoenMaat;

     // ...

     /**
       * @desc Verander de schoenmaat
       * @param $iSize integer
       */
     public function setSchoenMaat($iSize){
         if(!is_numeric($iSize)){
            throw new Exception(quot;Dit is geen getalquot;);
         }
         if($iSize < 45){
            throw new Exception(quot;Dit kan geen PHPFreak zijn!quot;);
         }
         $this->iSchoenMaat = $iSize;
     }

}
?>
Objecten


•   Objecten zijn instanties van een class,
•   Op een object kan je de bewerkingen uitvoeren die een class biedt,
•   Aan een object kan je eigenschappen vragen.
Voorbeeld

<?php
require quot;Person.phpquot;;
require quot;PHPFreak.phpquot;;

$oFreak = new PHPFreak(quot;Pietjequot;);
echo $oFreak->getNaam();

// Contract overtreding: methode verwacht een integer
$oFreak->setSchoenMaat(quot;Klaasjequot;);

// Dit werkt wel
$oFreak->setSchoenMaat(46);
?>
Class methods
            class Person {
              public static function find($sName){
                return new Person($sName);
              }
            }
            $oPerson = Person::find(“Pietje”);


•   Als je op een object een methode aanroept, roep je een instantie methode
    aan: $oPerson->setName(“Pietje”);
•   Je kunt ook statische methoden aanroepen: Person::find(“Klaas”);
•   Een statische methode voert iets op class niveau uit en heeft dus geen
    toegang tot eigenschappen van een object.
1. Waarom OOP?

2. Basis uitleg over OOP

3. Design Patterns

4. ActiveRecord

5. Model View Controller

6. Extra informatie

7. Vragen
Design Patterns


    Een verzameling van klassen,
•   met een bepaalde onderlinge structuur,
•   die een oplossing bieden voor veel voorkomende software problemen.


    Voorbeelden:
•   Singleton
•   ActiveRecord
•   Model,View en Controller (MVC)
1. Waarom OOP?

2. Basis uitleg over OOP

3. Design Patterns

4. ActiveRecord

5. Model View Controller

6. Extra informatie

7. Vragen
ActiveRecord


    ActiveRecord vormt een laag op een database en versimpelt het
    gebruik van een database. SQL queries zijn bijvoorbeeld nauwelijks nog
    nodig.


    Voorbeeld contract van class ActiveRecord:
•   find($iID) geeft de rij met het gegeven id terug
•   findAll($aConditions = null, $iLimit = null, $iOffset = null) geeft 1 of
    meer rijen terug die voldoen aan de gegeven condities.
Voorbeeld
<?php
require quot;ActiveRecord.phpquot;;

class User extends ActiveRecord {

}

// SELECT * FROM user WHERE status > 5 LIMIT 10
User::findAll(array(quot;status > ?quot;, 5), 10)

// SELECT * FROM user WHERE id=1
$oUser = User::find(1);
$oUser->name = quot;Pietjequot;;

// UPDATE user SET name = quot;Pietjequot; WHERE id=1
$oUser->save();

?>
ActiveRecord


•   ActiveRecord is te vinden in het CakePHP framework
•   Een variant op het ActiveRecord pattern is ook te vinden in het Zend
    Framework
1. Waarom OOP?

2. Basis uitleg over OOP

3. Design Patterns

4. ActiveRecord

5. Model View Controller

6. Extra informatie

7. Vragen
MVC


    Het model, view en controller pattern is zeer goed toepasbaar binnen
    webapplicaties. Je maakt in je code een splitsing tussen:
•   Model: je database; bijvoorbeeld een ActiveRecord pattern
•   View: je templates; bijvoorbeeld Smarty
•   Controller: het afhandelen van verzoeken van een client en het
    samenvoegen van het model en de view.
Zonder OOP


    Sommige zaken doe je dubbel als je meer acties krijgt:
•   Vertalen van een URL naar een aantal handelingen in PHP
•   Foutafhandeling bij missende parameters
•   Foutafhandeling bij SQL queries
•   SQL queries


    Sommige zaken zijn onoverzichtelijk:
•   HTML tussen je PHP code
•   Scheiding tussen de verschillende acties
Voorbeeld zonder OOP
<?php
if(isset($_GET['action']) && $_GET['action'] == quot;showquot;){
   if(!isset($_GET['id']) || !is_numeric($_GET['id'])){
      exit(quot;Kan geen gebruiker ophalen zonder idquot;);
   }

     $rResult = mysql_query(quot;SELECT *
                           FROM users
                           WHERE id = quot;.intval($_GET['id']));
     if(!$rResult){
        exit(quot;Er ging iets fout: quot;.mysql_error());
     }

     $oUser = mysql_fetch_assoc($rResult);
     echo quot;<h1>quot;.$oUser['name'].quot;</h1>quot;;
     echo quot;<p>quot;.$oUser['email'].quot;</p>quot;;
}
?>
Voorbeeld met OOP
// User.php
<?php
class User extends ActiveRecord {

}
?>

// UserController.php
<?php
class UserController extends ApplicationController {

     public function indexAction(){
        $oUser = User::find($this->params['id']);
        $this->user = $oUser;
     }

}
?>

// index.phtml
<h1><?= $this->user['name'] ?></h1>
<p><?= $this->user['email'] ?><p>
Model
    De verantwoordelijkheden van het model zijn:
•   Een abstractie bieden van de database
•   Automatische controle op parameters
•   SQL injection tegengaan



                              View
    De verantwoordelijkheden van de view zijn:
•   HTML weergave mogelijk maken
•   Variabelen beschikbaar maken die toegekend zijn in de controller
Controller


    De verantwoordelijkheden van de controller zijn:
•   De URL omschrijven naar een aanroep van een bepaalde methode
•   Parameters controleren en beschikbaar maken in een instantie variabele
•   Variabelen declareren voor de view


    De opbouw van een URL is bijvoorbeeld: /user/show/5 De basis class
    ApplicationController zal dit omschrijven naar een aanroep van de
    methode showAction in de class UserController.
Applicatie structuur


•   De mappen structuur van een MVC applicatie zal er bijvoorbeeld zo uit zien:
1. Waarom OOP?

2. Basis uitleg over OOP

3. Design Patterns

4. ActiveRecord

5. Model View Controller

6. Extra informatie

7. Vragen
Frameworks


    De volgende frameworks zijn volledig OOP gebaseerd en kunnen je helpen
    bij je eerste stappen in OOP land:
•   Zend Framework (helaas nog steeds alpha status)
•   CakePHP
•   Symfony
•   CodeIgniter
Losse classes


    Op internet zwerven veel losse classes die je onderdeel van je code kan
    maken, enkele bekende:
•   PHPMailer: e-mail versturen via PHP
•   FormHandler: snel formulieren genereren en afhandelen
•   FPDF: PDF documenten genereren
•   Smarty: template engine


    Op phpclasses.org zijn veel classes te vinden
Conclusie
Object Oriented Code is like sex.

  More people talk about it than are actually doing it.

The few who are doing it are: doing it poorly (sure it will
    be better next time) and not practicing it safely.
1. Waarom OOP?

2. Basis uitleg over OOP

3. Design Patterns

4. ActiveRecord

5. Model View Controller

6. Extra informatie

7. Vragen

More Related Content

Similar to Object Oriented Programming for web applications

Lucius Drupal Development Cursus
Lucius Drupal Development CursusLucius Drupal Development Cursus
Lucius Drupal Development CursusLuciuswebsystems
 
Flex In De Praktijk
Flex In De PraktijkFlex In De Praktijk
Flex In De Praktijkmarcel panse
 
Zelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginnersZelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginnersRachel Walraven
 
Cursus Zend Framework - 2
Cursus Zend Framework - 2Cursus Zend Framework - 2
Cursus Zend Framework - 2bartjeukendrup
 
De 10 geboden van WordPress Development
De 10 geboden van WordPress DevelopmentDe 10 geboden van WordPress Development
De 10 geboden van WordPress DevelopmentFloris Lof
 
PFZ Workshop - Automatiseren van functionele tests
PFZ Workshop - Automatiseren van functionele testsPFZ Workshop - Automatiseren van functionele tests
PFZ Workshop - Automatiseren van functionele testsRichard Tuin
 
R2H ImageManager en slim omgaan met afbeeldingen in Joomla!
R2H ImageManager en slim omgaan met afbeeldingen in Joomla!R2H ImageManager en slim omgaan met afbeeldingen in Joomla!
R2H ImageManager en slim omgaan met afbeeldingen in Joomla!Rick Spaan
 
Best Practice: Joomla! templating
Best Practice: Joomla! templatingBest Practice: Joomla! templating
Best Practice: Joomla! templatingHans Kuijpers
 
Software Engineering College 2 - ETL and databases
Software Engineering College 2 - ETL and databasesSoftware Engineering College 2 - ETL and databases
Software Engineering College 2 - ETL and databasesJurjen Helmus
 
Html5 jeugdwerknet
Html5 jeugdwerknetHtml5 jeugdwerknet
Html5 jeugdwerknetHans Rossel
 
Presentatie WordPress Theme Frameworks WordCamp NL 2010
Presentatie WordPress Theme Frameworks WordCamp NL 2010Presentatie WordPress Theme Frameworks WordCamp NL 2010
Presentatie WordPress Theme Frameworks WordCamp NL 2010Remkus de Vries
 
20130308 GB les 6
20130308 GB les 620130308 GB les 6
20130308 GB les 6mleeuwen
 
Afstudeerpresentatie
AfstudeerpresentatieAfstudeerpresentatie
Afstudeerpresentatiechiel
 
Durandal at Team4Talent
Durandal at Team4TalentDurandal at Team4Talent
Durandal at Team4TalentPeter Morlion
 

Similar to Object Oriented Programming for web applications (20)

Lucius Drupal Development Cursus
Lucius Drupal Development CursusLucius Drupal Development Cursus
Lucius Drupal Development Cursus
 
The Rails way
The Rails wayThe Rails way
The Rails way
 
Flex In De Praktijk
Flex In De PraktijkFlex In De Praktijk
Flex In De Praktijk
 
Zelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginnersZelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginners
 
Cursus Zend Framework - 2
Cursus Zend Framework - 2Cursus Zend Framework - 2
Cursus Zend Framework - 2
 
De 10 geboden van WordPress Development
De 10 geboden van WordPress DevelopmentDe 10 geboden van WordPress Development
De 10 geboden van WordPress Development
 
PFZ Workshop - Automatiseren van functionele tests
PFZ Workshop - Automatiseren van functionele testsPFZ Workshop - Automatiseren van functionele tests
PFZ Workshop - Automatiseren van functionele tests
 
PHP
PHPPHP
PHP
 
R2H ImageManager en slim omgaan met afbeeldingen in Joomla!
R2H ImageManager en slim omgaan met afbeeldingen in Joomla!R2H ImageManager en slim omgaan met afbeeldingen in Joomla!
R2H ImageManager en slim omgaan met afbeeldingen in Joomla!
 
Web Security 101
Web Security 101Web Security 101
Web Security 101
 
embedded SQL en JDBC
embedded SQL en JDBCembedded SQL en JDBC
embedded SQL en JDBC
 
New and improved ASP.NET MVC 5
New and improved ASP.NET MVC 5New and improved ASP.NET MVC 5
New and improved ASP.NET MVC 5
 
Best Practice: Joomla! templating
Best Practice: Joomla! templatingBest Practice: Joomla! templating
Best Practice: Joomla! templating
 
Software Engineering College 2 - ETL and databases
Software Engineering College 2 - ETL and databasesSoftware Engineering College 2 - ETL and databases
Software Engineering College 2 - ETL and databases
 
Html5 jeugdwerknet
Html5 jeugdwerknetHtml5 jeugdwerknet
Html5 jeugdwerknet
 
Presentatie WordPress Theme Frameworks WordCamp NL 2010
Presentatie WordPress Theme Frameworks WordCamp NL 2010Presentatie WordPress Theme Frameworks WordCamp NL 2010
Presentatie WordPress Theme Frameworks WordCamp NL 2010
 
20130308 GB les 6
20130308 GB les 620130308 GB les 6
20130308 GB les 6
 
Afstudeerpresentatie
AfstudeerpresentatieAfstudeerpresentatie
Afstudeerpresentatie
 
Ldap
LdapLdap
Ldap
 
Durandal at Team4Talent
Durandal at Team4TalentDurandal at Team4Talent
Durandal at Team4Talent
 

More from Edwin Vlieg

Docker at MoneyBird
Docker at MoneyBirdDocker at MoneyBird
Docker at MoneyBirdEdwin Vlieg
 
Docker from a team perspective
Docker from a team perspectiveDocker from a team perspective
Docker from a team perspectiveEdwin Vlieg
 
From Idea to Business
From Idea to BusinessFrom Idea to Business
From Idea to BusinessEdwin Vlieg
 
Advanced Testing on RubyEnRails '09
Advanced Testing on RubyEnRails '09Advanced Testing on RubyEnRails '09
Advanced Testing on RubyEnRails '09Edwin Vlieg
 
MoneyBird Gouden Factuur 2009
MoneyBird Gouden Factuur 2009MoneyBird Gouden Factuur 2009
MoneyBird Gouden Factuur 2009Edwin Vlieg
 
Frontend ontwikkeling
Frontend ontwikkelingFrontend ontwikkeling
Frontend ontwikkelingEdwin Vlieg
 
MoneyBird - The Rails Side
MoneyBird - The Rails SideMoneyBird - The Rails Side
MoneyBird - The Rails SideEdwin Vlieg
 

More from Edwin Vlieg (7)

Docker at MoneyBird
Docker at MoneyBirdDocker at MoneyBird
Docker at MoneyBird
 
Docker from a team perspective
Docker from a team perspectiveDocker from a team perspective
Docker from a team perspective
 
From Idea to Business
From Idea to BusinessFrom Idea to Business
From Idea to Business
 
Advanced Testing on RubyEnRails '09
Advanced Testing on RubyEnRails '09Advanced Testing on RubyEnRails '09
Advanced Testing on RubyEnRails '09
 
MoneyBird Gouden Factuur 2009
MoneyBird Gouden Factuur 2009MoneyBird Gouden Factuur 2009
MoneyBird Gouden Factuur 2009
 
Frontend ontwikkeling
Frontend ontwikkelingFrontend ontwikkeling
Frontend ontwikkeling
 
MoneyBird - The Rails Side
MoneyBird - The Rails SideMoneyBird - The Rails Side
MoneyBird - The Rails Side
 

Object Oriented Programming for web applications

  • 1. Object Oriented Programming voor webapplicaties Door Edwin Vlieg
  • 2. Waarom OOP? • Basis uitleg over OOP • Design Patterns • ActiveRecord • Model View Controller • Extra informatie • Vragen
  • 3. OOP • Object Oriented Programming • Alle code in classes • Classes hebben verantwoordelijkheden • Verantwoordelijkheden staan in het contract • Classes kunnen een Design Pattern vormen • PHP5 heeft een goede ondersteuning voor OOP
  • 4. Waarom OOP? • Structuur in je code • Herbruikbaarheid • Leesbaarheid • Sneller kunnen ontwikkelen • Design patterns • Communicatie met collega’s
  • 5. Maar ook in webapplicaties?? Ja, want: • die hebben ook recht op structuur, • PHP laat je altijd alles opnieuw doen, • er zijn goede design patterns voor. Waarschuwing: • OOP != procedurele code in classes gooien • OOP == een denkwijze
  • 6. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen
  • 7. Classes Class is een definitie van functionaliteit door middel van: • Eigenschappen: $bLustBier • Queries: getNaam() • Commando’s: setSchoenMaat($iSize) Eigenschappen zijn de ‘oude’ variabelen. Queries en commando’s zijn de ‘oude’ functies, in OOP context vaak methoden genoemd.
  • 8. <?php class Persoon { private $sNaam; public function __construct($sNaam){ $this->sNaam = $sNaam; } public function getNaam(){ return $this->sNaam; } } class PHPFreak extends Persoon { private $bLustBier; private $iSchoenMaat; public function __construct($sNaam){ parent::__construct($sNaam); $this->bLustBier = true; } public function setSchoenMaat($iSize){ if($iSize < 45){ throw new Exception(quot;Dit kan geen PHPFreak zijn!quot;); } $this->iSchoenMaat = $iSize; } } ?>
  • 9. Overerving • Door middel van overerving kan je in een overervende class gebruik maken van de functionaliteit van de basis class. • In veel gevallen een generalisatie van een class: Persoon > PHPFreak Controller > HomeController • Je specificeert extra eigenschappen en functionaliteit die alleen voor die generalisatie gelden (en dus niet voor de basis klasse)
  • 10. <?php class Persoon { private $sNaam; public function __construct($sNaam){ $this->sNaam = $sNaam; } public function getNaam(){ return $this->sNaam; } } class PHPFreak extends Persoon { private $bLustBier; private $iSchoenMaat; public function __construct($sNaam){ parent::__construct($sNaam); $this->bLustBier = true; } // ... public function setSchoenMaat($iSize){ // ... $this->iSchoenMaat = $iSize; } } ?>
  • 11. Design by Contract • Classen geven een contract: “als jij mij zo gebruikt, dan zal ik dit voor je regelen” • Via de commentaar-regels kan je zien wat het contract van een class of methode is. • Een class kan exceptions gooien als jij je niet aan het contract houdt. • Eigenschappen vaak private om contract te kunnen uitvoeren.
  • 12. <?php class PHPFreak extends Persoon { private $iSchoenMaat; // ... /** * @desc Verander de schoenmaat * @param $iSize integer */ public function setSchoenMaat($iSize){ if(!is_numeric($iSize)){ throw new Exception(quot;Dit is geen getalquot;); } if($iSize < 45){ throw new Exception(quot;Dit kan geen PHPFreak zijn!quot;); } $this->iSchoenMaat = $iSize; } } ?>
  • 13. Objecten • Objecten zijn instanties van een class, • Op een object kan je de bewerkingen uitvoeren die een class biedt, • Aan een object kan je eigenschappen vragen.
  • 14. Voorbeeld <?php require quot;Person.phpquot;; require quot;PHPFreak.phpquot;; $oFreak = new PHPFreak(quot;Pietjequot;); echo $oFreak->getNaam(); // Contract overtreding: methode verwacht een integer $oFreak->setSchoenMaat(quot;Klaasjequot;); // Dit werkt wel $oFreak->setSchoenMaat(46); ?>
  • 15. Class methods class Person { public static function find($sName){ return new Person($sName); } } $oPerson = Person::find(“Pietje”); • Als je op een object een methode aanroept, roep je een instantie methode aan: $oPerson->setName(“Pietje”); • Je kunt ook statische methoden aanroepen: Person::find(“Klaas”); • Een statische methode voert iets op class niveau uit en heeft dus geen toegang tot eigenschappen van een object.
  • 16. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen
  • 17. Design Patterns Een verzameling van klassen, • met een bepaalde onderlinge structuur, • die een oplossing bieden voor veel voorkomende software problemen. Voorbeelden: • Singleton • ActiveRecord • Model,View en Controller (MVC)
  • 18. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen
  • 19. ActiveRecord ActiveRecord vormt een laag op een database en versimpelt het gebruik van een database. SQL queries zijn bijvoorbeeld nauwelijks nog nodig. Voorbeeld contract van class ActiveRecord: • find($iID) geeft de rij met het gegeven id terug • findAll($aConditions = null, $iLimit = null, $iOffset = null) geeft 1 of meer rijen terug die voldoen aan de gegeven condities.
  • 20. Voorbeeld <?php require quot;ActiveRecord.phpquot;; class User extends ActiveRecord { } // SELECT * FROM user WHERE status > 5 LIMIT 10 User::findAll(array(quot;status > ?quot;, 5), 10) // SELECT * FROM user WHERE id=1 $oUser = User::find(1); $oUser->name = quot;Pietjequot;; // UPDATE user SET name = quot;Pietjequot; WHERE id=1 $oUser->save(); ?>
  • 21. ActiveRecord • ActiveRecord is te vinden in het CakePHP framework • Een variant op het ActiveRecord pattern is ook te vinden in het Zend Framework
  • 22. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen
  • 23. MVC Het model, view en controller pattern is zeer goed toepasbaar binnen webapplicaties. Je maakt in je code een splitsing tussen: • Model: je database; bijvoorbeeld een ActiveRecord pattern • View: je templates; bijvoorbeeld Smarty • Controller: het afhandelen van verzoeken van een client en het samenvoegen van het model en de view.
  • 24. Zonder OOP Sommige zaken doe je dubbel als je meer acties krijgt: • Vertalen van een URL naar een aantal handelingen in PHP • Foutafhandeling bij missende parameters • Foutafhandeling bij SQL queries • SQL queries Sommige zaken zijn onoverzichtelijk: • HTML tussen je PHP code • Scheiding tussen de verschillende acties
  • 25. Voorbeeld zonder OOP <?php if(isset($_GET['action']) && $_GET['action'] == quot;showquot;){ if(!isset($_GET['id']) || !is_numeric($_GET['id'])){ exit(quot;Kan geen gebruiker ophalen zonder idquot;); } $rResult = mysql_query(quot;SELECT * FROM users WHERE id = quot;.intval($_GET['id'])); if(!$rResult){ exit(quot;Er ging iets fout: quot;.mysql_error()); } $oUser = mysql_fetch_assoc($rResult); echo quot;<h1>quot;.$oUser['name'].quot;</h1>quot;; echo quot;<p>quot;.$oUser['email'].quot;</p>quot;; } ?>
  • 26. Voorbeeld met OOP // User.php <?php class User extends ActiveRecord { } ?> // UserController.php <?php class UserController extends ApplicationController { public function indexAction(){ $oUser = User::find($this->params['id']); $this->user = $oUser; } } ?> // index.phtml <h1><?= $this->user['name'] ?></h1> <p><?= $this->user['email'] ?><p>
  • 27. Model De verantwoordelijkheden van het model zijn: • Een abstractie bieden van de database • Automatische controle op parameters • SQL injection tegengaan View De verantwoordelijkheden van de view zijn: • HTML weergave mogelijk maken • Variabelen beschikbaar maken die toegekend zijn in de controller
  • 28. Controller De verantwoordelijkheden van de controller zijn: • De URL omschrijven naar een aanroep van een bepaalde methode • Parameters controleren en beschikbaar maken in een instantie variabele • Variabelen declareren voor de view De opbouw van een URL is bijvoorbeeld: /user/show/5 De basis class ApplicationController zal dit omschrijven naar een aanroep van de methode showAction in de class UserController.
  • 29. Applicatie structuur • De mappen structuur van een MVC applicatie zal er bijvoorbeeld zo uit zien:
  • 30. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen
  • 31. Frameworks De volgende frameworks zijn volledig OOP gebaseerd en kunnen je helpen bij je eerste stappen in OOP land: • Zend Framework (helaas nog steeds alpha status) • CakePHP • Symfony • CodeIgniter
  • 32. Losse classes Op internet zwerven veel losse classes die je onderdeel van je code kan maken, enkele bekende: • PHPMailer: e-mail versturen via PHP • FormHandler: snel formulieren genereren en afhandelen • FPDF: PDF documenten genereren • Smarty: template engine Op phpclasses.org zijn veel classes te vinden
  • 34. Object Oriented Code is like sex. More people talk about it than are actually doing it. The few who are doing it are: doing it poorly (sure it will be better next time) and not practicing it safely.
  • 35. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen