[TUT] OO PHP: Een model maken

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Hallo,

    Heb even snel voor mijn project een model geschreven met het CodeIgniter framework.

    Wou het even zeer simpel houden omdat ik zo naar bed moet. Maar bedacht me toen dat ik ook hierover even een simpele tutorial kon schrijven over PHP.

    Wat is een model?
    CodeIgniter werkt met een HMVC patroon.
    H staat voor Helper. Dat zijn bestanden die functies bevatten die het leven makkelijker moeten maken.
    M staat voor Model. Dit is een soort skelet. Deze bevatten schetsen van datastructuren. Deze zijn bedoeld om data vast te houden.
    V staat voor View. Dit is je huid. Oftewel de HTML waarin PHP variabelen terug in kunnen voorkomen. Dit doormiddel van een parser of normale PHP. Dit om PHP en HTML gescheiden te houden.
    C staat voor Controller. Dit is meer het brein van je applicatie. Deze moet alle berekening doen.

    Een model moet dus eenvoudig data kunnen opnemen, mogelijk aanpassen / converteren en kunnen afstaan.

    Nu heb ik een model geschreven voor de users. Deze moeten dus gebruikers informatie bevatten. Let op, deze is niet compleet. Dit is dus enkel een begin. Later komt er meer.

    PHP Source Code

    1. <?php
    2. /**
    3. * User
    4. * Will hold all user data of a registered person.
    5. * @author Tim van den Belt
    6. * @copyright 2013
    7. * @access public
    8. */
    9. class User extends CI_Model {
    10. /**
    11. * Generated String that is unique to the user
    12. */
    13. private $id;
    14. /**
    15. * User's email and login name but is encrypted
    16. */
    17. private $username;
    18. /**
    19. * Randomly created hash to use as extra salt generating password.
    20. * Is also encrypted.
    21. */
    22. private $extraSalt;
    23. /**
    24. * User's password. Is heavely hashed.
    25. */
    26. private $password;
    27. /**
    28. * User's personal first name.
    29. */
    30. private $firstName;
    31. /**
    32. * User's personal last name.
    33. */
    34. private $lastName;
    35. /**
    36. * User's country in ISO2 format.
    37. */
    38. private $countryISO2;
    39. /**
    40. * Get user information from the database
    41. * @param String $id
    42. * @return boolean if could find the user
    43. */
    44. public function get($id) {
    45. //Check if value is given.
    46. if(!isset($id)) {
    47. return false;
    48. }
    49. $this->db->select('*');
    50. $this->db->from('users');
    51. $this->db->where('id = '. "'" . $id . "'");
    52. $this->db->limit(1);
    53. $query = $this->db->get();
    54. //Could not find the user
    55. if(!$query->num_rows()) {
    56. return false;
    57. }
    58. //Get the data
    59. $userData = $query->result_array();
    60. //Set the data
    61. $this->id = $id;
    62. $this->username = $userData['username'];
    63. $this->extraSalt = $userData['extraSalt'];
    64. $this->password = $userData['password'];
    65. $this->firstname = $userData['firstname'];
    66. $this->lastName = $userData['lastName'];
    67. $this->countryISO2 = $userData['countryISO2'];
    68. return true;
    69. }
    70. }
    71. ?>
    Display All


    Van boven naar beneden:

    Source Code

    1. /**
    2. * User
    3. * Will hold all user data of a registered person.
    4. * @author Tim van den Belt
    5. * @copyright 2013
    6. * @access public
    7. */

    Dit is informatie over de klasse, in dit geval een model. Allereerst de klasse naam. Daarna wat deze klasse precies doet. Vervolgens enkele andere dingen die ik niet hier nader ga toelichten.

    Source Code

    1. class User extends CI_Model {

    We makken een klasse User aan. (let op: klasses schrijf je met een hoofdletter) welke de klasse CI_Model uitbreid. Dit houd in dat je de functies en atributen overneemt uit de CI_Model klasse welke van het framework is. Dit zodat je al standaard enkele dingen hebt en niet opnieuw in je klasse hoeft te maken.

    Source Code

    1. /**
    2. * Generated String that is unique to the user
    3. */
    4. private $id;

    Eerst een comment voor de variabele die verteld wat deze precies inhoudt.
    Vervolgens zie je private voor de variabele staan. Dit betekent dat de variabele enkel toegankelijk is binnen de klasse. Als je ergens anders deze variabele wilt pakken moet dit via een functie binnen de klasse die deze waarde returned.

    Geld ongeveer hetzelfde voor de rest van de variabelen.

    Source Code

    1. /**
    2. * Get user information from the database
    3. * @param String $id
    4. * @return boolean if could find the user
    5. */

    Wat commentaar voor de functie. Beginnend met waar de functie voor dient. Daarna beschrijven we voor elke parameter wat voor waarde je verwacht te ontvangen. Daarna zegje wat deze functie returned.
    Dit natuurlijk enkel als ze wel een parameter of return hebben.

    Source Code

    1. public function get($id) {

    Je maakt een functie aan die public en dus beschikbaar is voor iedereen buiten deze klasse. Je kan dus overal deze functie aanroepen.

    Deze functie gaat dus over het ophalen vaan gebruikers gegevens.

    Source Code

    1. //Check if value is given.
    2. if(!isset($id)) {
    3. return false;
    4. }

    Indien er geen ID is gegeven vertellen we meteen dat we geen gebruiker konden vinden en zeggen we dus false.

    Source Code

    1. $this->db->select('*');
    2. $this->db->from('users');
    3. $this->db->where('id = '. "'" . $id . "'");
    4. $this->db->limit(1);

    Vervolgens gaan we een query voorbereiden om gegevens uit de database te halen.
    $this staat voor het object zelf. De klasse zelf. Je roept dus van deze User klassen de variabele db aan welke een database object is. Vervolgens roep je de functies aan die staan aangegeven en geef je een waarde mee.

    Source Code

    1. $query = $this->db->get();
    2. //Could not find the user
    3. if(!$query->num_rows()) {
    4. return false;
    5. }

    We voeren de query uit in onze database en kijken of deze geen rows bevat. Indien dat namelijk het geval is konden we niks vinden en zeggen wij dus dat we geen gebruiker konden vinden.
    We hoeven niet met == 0 te vergelijken omdat de functie dan 0 zou moeten terug sturen welke gelijk staat aan false.

    Source Code

    1. //Set the data
    2. $this->id = $id;
    3. $this->username = $userData['username'];
    4. $this->extraSalt = $userData['extraSalt'];
    5. $this->password = $userData['password'];
    6. $this->firstname = $userData['firstname'];
    7. $this->lastName = $userData['lastName'];
    8. $this->countryISO2 = $userData['countryISO2'];
    9. return true;

    Vervolgens krijgen we alle data van de database. Dan vullen we de variabelen van de klasse in met deze data zodat we deze later kunnen gebruiken.

    Dat was het voor nu. Let wel op dat bij een return de functie meteen stopt.

    Volgende keer misschien meer indien mensen het fijn vinden om zulke dingen te lezen! :)

    Project is Een gratis live chatbox voor jouw eigen website

    Mvg,
    Tim
    Master student IT-recht en Master student Ondernemingsrecht & software ingenieur
    My Personal profile
    My professional profile (LinkedIn/CV)

    1,302 times read

Comments 2

  • M.Beers -

    Erg nuttig.
    Kleine correctie in je tutorial...

    Codeigniter maakt gewoon gebruik van het MVC pattern ;) de H van HMVC staat voor Hierarchical en niet voor Helper...

    HMVC houdt dus in dat deze modulair is opgebouwd.

  • K.Rens -

    Goed geschreven.
    Dankje wel om dit te delen!