OOP gedachtengang

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Mobile Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Senior Mobile Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

Software Developer

Longship.io gaat de wereld veroveren met baanbrekende software en legendarische... pizza-avonden! Lees hier de vacature van IT Operations Manager! Bij Longship werken we met een team van 5 mensen aan software voor laadpaal operators. Longship is ontstaan in 2020 met als doel om de elektrische mobiliteitstransitie aan te jagen. We zijn nu al een wereldwijde speler doordat we continu voorop lopen in innovatie. Ons platform helpt het versneld elektrificeren van wagenparken, internationaal! Wij zijn een startup met grote ambities die we willen bereiken met een relatief klein en efficiënt team. Je krijg de kans om ontzettend veel te leren van

Bekijk vacature »

Java Developer

Dit ga je doen Ontwerpen en bouwen van nieuwe functionaliteiten binnen de complexe omgeving; Proactief de processen kwalitatief en efficient inrichten; Opzetten van Unit Tests; Code Reviews; Regie nemen voor innovatieve projecten; Landschap beheren en de bijbehorende ketens hierbij in het oog houden. Hier ga je werken De organisatie is actief binnen de financiele branche en heeft een IT afdeling van circa 450 man. De organisatie voorziet de maatschappij binnen de financiele dienstverlening en is gedurende de jaren een onmisbare schakel geworden. Het is een high profile organisatie waar ze veel te maken hebben met veranderingen voortkomend uit maatschappelijke ontwikkelingen,

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Full Stack Developer/ Applicatie Ontwikkelaar

Wat jij doet Als Applicatie Ontwikkelaar ben je onderdeel van het team die de Rimote omgeving ontwikkeld en onderhoud. Hierbij kan je denk aan de cloud, on premise en webapplicaties welke worden gebruikt in bijvoorbeeld industriële bakkerijen, biogasinstallaties en kwekerijen. Deze applicaties verzorgen (remote) de aansturing en monitoring van processen, machines en robots. Van a tot z ben je betrokken bij projecten. Dit betekent vanaf ontwerp tot oplevering. Je moet samen met jouw team een goed product neer zetten. Dit begint met het opzetten van het ontwerp. De basis van de software moet staan als een huis. Daarvoor moet jij

Bekijk vacature »

Back-end developer

Functieomschrijving Voor een gewaardeerde werkgever in regio Tilburg zijn wij op zoek naar een gemotiveerde SQL Developer/ functioneel consultant. Jij wordt verantwoordelijk voor zowel het ontwerpen en implementeren van SQL-databases als voor het in kaart brengen van de bedrijfsprocessen van een organisatie en het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt als volgt uit te zien: Ontwerp en implementatie van SQL-databases: Je ontwerpt, ontwikkelt en implementeert SQL-databases om de data behoeften van de organisatie te ondersteunen; Analyse van bedrijfsprocessen: Je analyseert de bedrijfsprocessen van de organisatie om de behoeften van de klant te begrijpen en te vertalen naar

Bekijk vacature »

Front-End React Developer

As a Front-End React Developer you improve the user-experience of our web applications for your colleagues in Coolblue. How do I become a Front-End React Developer at Coolblue? As a Front-End React Developer you are responsible for developing user interface components and implementing them using React.js concepts and workflows. You work with the UX Designer and get energy from coming up with creative solutions and present these within the team. During the day you gather and welcome feedback on your technical and soft skills. Would you like to become a Front-End React Developer at Coolblue? Read below if the job

Bekijk vacature »

Product Developer (M/F), Fulltime 40 h/week

A global Plantbased revolution – that is our dream. Maximising the protein transition – that is our mission. Producing and developing sustainable and delicious products – that is what we do. Ojah is a fast growing company with a mission and has the ambition to be the world leader in its field. To support this growth we are hiring new colleagues. People that would like to make a difference and dare to dream big. With currently a 150 colleagues proudly working on our exceptional products. Working in a dynamic surrounding that runs full speed ahead. We need you! Product Developer

Bekijk vacature »

SAP HANA Cloud Application Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 12662 Introductie HANA Cloud Application Developer at a High Tech company. The company is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. This role is situated in the Big Data Analytics (BDA) Domain. The teams have mixture of young talent and senior specialists and have a

Bekijk vacature »

Traineeship Full Stack .NET Developer

Dit ga je doen Start op 7 augustus 2023 bij de Experis Academy en ontwikkel jezelf tot een gewilde Full Stack .NET Developer. Maar hoe ziet het traineeship eruit en wat kun je verwachten? Periode 1 De eerste 3 maanden volg je fulltime, vanuit huis, een op maat gemaakte training in teamverband. Je leert belangrijke theorie en krijgt kennis van de benodigde vaardigheden en competenties die nodig zijn om de IT-arbeidsmarkt te betreden. Zowel zelfstandig als in teamverband voer je praktijkopdrachten op het gebied van front- en backend development uit. Wat er per week op het programma staat kun je

Bekijk vacature »

Junior Java Developer

Dit ga je doen Je ontwikkelt innovatieve, maatschappelijk belangrijke applicaties; Je implementeert nieuwe features; Je gaat in gesprek met eindgebruikers en designers om de applicaties continu te finetunen; Je draait mee in een professionele Agile/Scrum omgeving. Hier ga je werken Onze klant is een internationale organisatie gevestigd in de omgeving van Amsterdam. Ze staan zeer goed bekend in de markt door hun innovatieve dienstverlening op IT gebied en hun gepassioneerde werknemers. Voor hun inspanningen op het gebied van IT hebben ze meerdere prijzen gewonnen! Onze klant is onderdeel van een Corporate werkgever en heeft zelf 300 mensen in dienst. Om

Bekijk vacature »

C#.NET Developer

Functieomschrijving We are looking for a dutch native speaker In deze uitdagende functie ga je werken als onderdeel van het development team, in de functie van C#.NET Developer, Je gaat maatwerk software bouwen voor diverse klanten. Ook optimaliseer je bestaande software en bouw je API koppelingen. Je bent vooral met back-end development bezig. Je krijgt veel vrijheid in deze functie en je krijgt de kans om mee te denken in bedrijfsprocessen. Deels thuiswerken is geen enkel probleem! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van

Bekijk vacature »

Back end developer Python, PHP

Functie Jij als full stack ontwikkelaar zult komen te werken samen met 1 PHP ontwikkelaar een PO en een flexibele schil aan ontwikkelaars . Samen ga je ervoor zorgen dat de huidige producten doorontwikkeld worden. De marketplace is geschreven in PHP Laravel en in de front end React. De roostersoftware is ontwikkeld in Python in combinatie met React in de front end. Jij zult voornamelijk (lees 75%) werken aan de roostersoftware. Momenteel ligt de uitdaging in het feit dat de roostersoftware breder schaalbaar moet worden zodat het voor meerdere flexwerkers ingezet kan worden. Verder willen ze financiële koppelingen gaan maken

Bekijk vacature »

Software Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Pagina: 1 2 3 4 5 volgende »

Jasper DS

Jasper DS

05/06/2012 21:16:37
Quote Anchor link
Hoi,

hier gaan we weer! Ik zou mijn OOP gedachtegang nog eens willen laten controleren door jullie. De situatie is als volgt:

Quote:
Er staat een vast aantal gebruikers in de database. Deze moeten kunnen inloggen en nadien een rapport kunnen aanmaken, raadplegen of verzenden. Een gebruiker kan voor een vast aantal bedrijven rapporten invullen.

Bij het aanmaken van een nieuw rapport selecteert de gebruiker dus eerst een bedrijf waarvoor hij het rapport moet invullen waarna alle klanten van het bedrijf in een lijst word gezet en de klant kan zoeken in die lijst. Heeft hij desbetreffende klant gevonden word er een formulier aangemaakt met enkele basis gegevens verschillend per klant die de gebruiker verder moet aanvullen en nadien kan opslaan tot later of verzenden.


Uit deze situatie lijd ik 4 objecten (=classes) af.
- Gebruiker
- Rapport
- Klant
- Bedrijf


Mijn gedachtegang:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php

class Gebruiker
{    
    /*
    ** Mijn gebruiker moet natuurlijk kunnen inloggen!
    ** Daarvoor heeft hij zijn GEBRUIKERSNAAM en WACHTWOORD nodig
    */

    function inloggen($gebruikersnaam, $wachtwoord)
    {
        
    }

    
    /*    
    ** Mijn gebruiker is ingelogd en ik wil zijn naam ophalen
    */

    function getName()
    {
    
    }
}
    

class Rapport
{
    /*
    **    RAPPORT ZIT IN DB EN BEVAT:
    **    - id
    **    - gebruiker
    **     - bedrijf
    **     - datum
    **     - ...
    **/

    /*
    ** Ik wil rapporten kunnen ophalen met filter!
    ** Filter kan op één bepaald lid of op een datum of op meerdere zaken tegelijk
    */

    function getRapporten()
    {
    
    }

    
    /*
    **    Ik wil ook meer info kunnen hebben over één specifiek rapport
    */

    function getRapport($id)
    {
        
    }

    
    /*
    **    Mijn lid moet natuurlijk ook een rapport kunnen aanmaken en bewaren
    */

    function setRapport()
    {
    
    }

    
    
    /*
    **    Mijn rapport(en) moet(en) per mail vertuurd kunnen worden. (1 of meerdere per mail)
    */

    function sendRapport
    {
    
    }
}


class Bedrijf
{
    /*
    **    Ik moet een lijst kunnen weergeven van de bedrijven binnen de applicatie
    */

    function getBedrijven()
    {
    
    }
}


class Klanten
{
    /*
    **    Ik moet een lijst kunnen geven van alle klanten waaruit een gebruiker kan kiezen voor een rapport in te vullen a.d.h.v. een bedrijf
    */

    function getKlanten()
    {
    
    }
}

?>
Gewijzigd op 05/06/2012 21:17:46 door Jasper DS
 
PHP hulp

PHP hulp

17/05/2024 09:32:02
 
Wouter J

Wouter J

05/06/2012 21:28:47
Quote Anchor link
Offtopic:
Ga of scripten in het engels of in het nederlands, maar getKlanten oid kan echt niet...


Je objecten heb je nu wel goed. Al is Klant en Gebruiker natuurlijk allebei een mens. Je zou dus een Person object kunnen hebben en de Customer en User kunnen die Person object dan extenden met wat extra waardes (als hun RANG).

Tevens moet je je nu gaan verdiepen in een design pattern voor het organiseren tussen de DB en het object. Ik gebruik hiervoor altijd een DataMapper, dus verdiep je daar eens in.
Je hebt hier meerdere datamappers nodig. Zo heb je hier een UserMapper (of PersonMapper), die kan inloggen/uitloggen; nieuwe users aanmaken; users verwijderen en je hebt een RapportMapper die rapporten ophaalt (met filters of via getById oid); rapporten aanmaakt; rapporten verwijderd en je hebt nog een CompanyMapper voor het ophalen van bedrijven.

De objecten die jij hier hebt zouden hier eigenlijk alleen maar waardes mogen vast houden, personen en bedrijven krijgen een naam; een persoon krijgt een rang; een user een wachtwoord; een rapport meerdere gebruikers; enz.

Kortom: Je objecten gedachtegang is nu goed, alleen nu nog hoe je dat object naar een flexibele en makkelijk te beheren script maakt.
Je moet eigenlijk zo denken dat geen 1 class of method meerdere functionaliteiten mag(lees: zou moeten) hebben. Als je class de communicatie met de DB regelt (het inloggen bijv.) dan mag hij niet ook nog de gegevens vasthouden.
Gewijzigd op 05/06/2012 21:30:45 door Wouter J
 
Jasper DS

Jasper DS

05/06/2012 21:34:46
Quote Anchor link
Wouter J op 05/06/2012 21:28:47:
Offtopic:
Ga of scripten in het engels of in het nederlands, maar getKlanten oid kan echt niet...

Haha oke doe ik!

Wouter J op 05/06/2012 21:28:47:
Je objecten heb je nu wel goed. Al is Klant en Gebruiker natuurlijk allebei een mens. Je zou dus een Person object kunnen hebben en de Customer en User kunnen die Person object dan extenden met wat extra waardes (als hun RANG).

De gebruiker is inderdaad een persoon, de klant daarentegen is een bedrijf. Zo kan gebruiker x voor bedrijf y (=zijn werkgever) van bedrijf z (= klant van bedrijf x) een rapport invullen.

Wouter J op 05/06/2012 21:28:47:
Tevens moet je je nu gaan verdiepen in een design pattern voor het organiseren tussen de DB en het object. Ik gebruik hiervoor altijd een DataMapper, dus verdiep je daar eens in.
Je hebt hier meerdere datamappers nodig. Zo heb je hier een UserMapper (of PersonMapper), die kan inloggen/uitloggen; nieuwe users aanmaken; users verwijderen en je hebt een RapportMapper die rapporten ophaalt (met filters of via getById oid); rapporten aanmaakt; rapporten verwijderd en je hebt nog een CompanyMapper voor het ophalen van bedrijven.

En hoe leer ik dit het best of op welke manier bekijk ik zo'n mapper?

Wouter J op 05/06/2012 21:28:47:
De objecten die jij hier hebt zouden hier eigenlijk alleen maar waardes mogen vast houden, personen en bedrijven krijgen een naam; een persoon krijgt een rang; een user een wachtwoord; een rapport meerdere gebruikers; enz.

Met dit deeltje van OOP ben ik dus nog niet mee. Ik heb al mijn objecten een class gegeven en nu moet ik een class toevoegen die de classes met elkaar verbind?

Alvast bedankt voor de verhelderende reactie wouter!

Jasper

Edit:

Ik stootte net op datamapper. Ik neem aan dat dit eigenlijk een soort mini-framework is? Kan ik zoiets gebruiken?
Gewijzigd op 05/06/2012 21:41:11 door Jasper DS
 
Wouter J

Wouter J

05/06/2012 22:02:49
Quote Anchor link
Quote:
Ik heb al mijn objecten een class gegeven en nu moet ik een class toevoegen die de classes met elkaar verbind?

Nee. Je hebt nu 2 dingen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
   _                
  (_)                    ____
   |                    |____|
  \|/                   |____|
   |                    |____|
  / \
De User (object)         De DB

De User object ziet er waarschijnlijk zoiets uit (zonder rangen en person object):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
class User
{
    protected $id;
    protected $name;
    protected $password;
    protected $email;

    public function __construct($name, $password, $email)
    {

        $this->name = (string) $name;
        $this->password = (string) $password;
        $this->email = (string) $email;
    }


    public function setName($name)
    {

        $this->name = (string) $name;
    }

    public function setPassword($password)
    {

        $this->password = (string) $password;
    }

    public function setEmail($email)
    {

        $this->email = (string) $email;
    }

    public function setId($id)
    {

        $this->id = (int) $id;
    }


    public function getName()
    {

        return $name;
    }

    public function getPassword()
    {

        return $password;
    }

    public function getEmail()
    {

        return $email;
    }

    public function getId()
    {

        return $id;
    }
}

?>

Dit is een object dat alleen data kan vasthouden. Je gegevens invullen, en bewerken, en ophalen.

De DB is gevuld als een tabel zoals dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
+----+--------+----------+-------------------+-----------+
| id | name   | password | email             | logged_in |
+----+--------+----------+-------------------+-----------+
| 1  | Wouter | 13hg35f6 | [email protected] | 1         |
| 2  | Jasper | h356gh21 | [email protected] | 0         |
| 3  | ...    | ...      | ...               |           |
+----+--------+----------+-------------------+-----------+


Als we deze connectie tussen User en Db in het User object stoppen komen we in de problemen: Het is niet flexibel en de class heeft meerdere taken. Stel we veranderen van MySQLi in PDO dan zou ik de hele User klasse moeten veranderen, als we een apart object hebben kunnen we die User gewoon met rust laten en alleen dat speciale object aanpassen, we kunnen zelfs meerdere DB objecten maken zodat je een MySQLi Mapper en een PDO mapper hebt, een Adapter pattern.

We hebben dus een extra object nodig: De DataMapper
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
   _                
  (_)                    ____
   |    de datamapper   |____|
  \|/   =============   |____|
   |                    |____|
  / \
De User (object)         De DB

Deze DataMapper noemen we UserMapper.

Deze UserMapper zorgt voor de communicatie tussen DB en object en omgekeerd. Een voorbeeldje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
class UserMapper
{
    protected $db; // db abstractielaag

    public function __construct(PDO $db)
    {

        $this->db = $db;
    }


    public function getById($id)
    {

        $stmt = $this->db->prepare("SELECT name, password, email, logged_in FROM users WHERE id = ?");

        $stmt->execute(array((int) $id));
        $result = $stmt->fetch(PDO::FETCH_ASSOC);
        $result['id'] = (int) $id;

        return $this->populate($result);
    }


    /**
     * Maak van een arrray met data een User object
     */

    public function populate(array $data)
    {

        $user = new User($data['name'], $data['password'], $data['email']);
        $user->setId($data['id']);

        return $user;
    }


    public function save(User $user)
    {

        $stmt = $this->db->prepare("UPDATE users SET name = :name AND password = :password AND email = :email WHERE id = :id");

        $stmt->execute(array(
            ':name' => $user->getName(),
            ':password' => $user->getPassword(),
            ':email' => $user->getEmail(),
            ':id' => $user>getId(),
        ));
    }


    public function create(User $user)
    {

        $stmt = $this->db->prepare("INSERT INTO users(name, password, email) VALUES (:name, :password, :email)");

        $stmt->execute(array(
            ':name' => $user->getName(),
            ':password' => $user->getPassword(),
            ':email' => $user->getEmail(),
        ));


        $user->setId($this->db->lastInsertId);

        return $user;
    }


    public function logIn(User $user)
    {

         // stel logged_in = 1 in bij de $user->getId()
    }

    // ...
}
?>


Nu heb je een mooi object gemaakt voor de communicatie tussen db en object. Het gebruik wordt dan zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$user
= new User('koen', 'somepass', '[email protected]');
$userMapper = new UserMapper($PDO); // maak $PDO

$user = $userMapper->create($user);
echo 'Hello '.$user->getName().' welcome!';

// andere pagina
$user = $userMapper->getById(2); // haal Jasper op
$userMapper->logIn($user); // log de user in

$user->setName('Jasper PHP');
$userMapper->save($user); // verander user

$userMapper->delete($user); // delete user
?>


Quote:
En hoe leer ik dit het best of op welke manier bekijk ik zo'n mapper?

Hier op het forum alle OO topics lezen en zoeken op google op bijv. php oo design patterns getting started of dat getting started weggelaten.
Wat reacties met design patterns:
- Singleton Pattern (niet echt voorstander van)
- Factory Pattern (en ActiveRecord een andere methode voor communiceren met de DB)
- Datamapper Pattern (nog een voorbeeldje, gemaakt voor jou, van Pim)
- Dependency Injection Pattern
- Adapter Pattern (of een ingewikkeldere van pim: http://www.phphulp.nl/php/forum/topic/paginering-oop/84869/#605327)
Gewijzigd op 05/06/2012 22:14:51 door Wouter J
 
Jasper DS

Jasper DS

05/06/2012 22:34:00
Quote Anchor link
Zo nu heb ik het eindelijk door! (theoretisch althans!) Nu nog omzetten naar de praktijk.

Maar als ik dan kijk naar de procedurele code dan zie ik dat de User class slechts éénmaal word aangeroepen en we die verder niet meer gebruiken?
Gewijzigd op 05/06/2012 22:35:26 door Jasper DS
 
Wouter J

Wouter J

05/06/2012 22:37:44
Quote Anchor link
Niet in deze code. Maar wel in je ontwerp bijv. om de naam te echoën, of bij het verzenden van een mail om de email te achterhalen.

De User is nu gewoon een klasse geworden die alles bevat wat wij weten over die user, wanneer je dus iets van die user nodig hebt hoef je slechts $user->getWhatYouNeed() aan te roepen.
 
Jasper DS

Jasper DS

05/06/2012 22:41:56
Quote Anchor link
Oke dus stel nu ik wil mijn naam echoën als ik ingelogd ben dan word dat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$PDO
= new PDO(...);
$userMapper = new UserMapper($PDO); // maak $PDO

$user = $userMapper->getById($_SESSION['user_id']);
$usermapper->populate($user);

$user->getName();

?>
Gewijzigd op 05/06/2012 22:42:20 door Jasper DS
 
Wouter J

Wouter J

05/06/2012 22:43:30
Quote Anchor link
Op het feit dat je de echo vergeten wel.

Alleen Regel 6 hoort er niet, wat denk jij dat de populate method doet?
 
Jasper DS

Jasper DS

05/06/2012 22:44:39
Quote Anchor link
Ik dacht dat die de data die ik verzamel op lijn 5 in mijn user object zette?
 
Wouter J

Wouter J

05/06/2012 22:47:19
Quote Anchor link
Nee, dat doet de getById method al, kijk maar eens goed
 
Jasper DS

Jasper DS

05/06/2012 22:48:52
Quote Anchor link
Oke! ik moet de populate dus inderdaad niet meer zelf uitvoeren omdat mijn functie deze zelf al aanroept.

Edit:
kan de getById() ook zo?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
public function getById($id)
{

    $qry = this->db->query("SELECT name, password, email, logged_in FROM users WHERE id = ".$id)
    
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    $result['id'] = (int) $id; // waarvoor dient deze regel?

    return $this->populate($result);
    
}

?>


ps: hoe zit het dan met mysql injectie?
Gewijzigd op 05/06/2012 22:57:23 door Jasper DS
 
Roel -

Roel -

05/06/2012 23:00:43
Quote Anchor link
Thx Wouter, dit schept voor mij ook een duidelijker beeld!

Toevoeging op 05/06/2012 23:01:44:

PHP Jasper; MySQL injectie bestaat niet meer in PDO, dat wordt automatisch geregeld.
Handig :-)
 
Jasper DS

Jasper DS

06/06/2012 07:35:27
Quote Anchor link
Bedankt Roel daar was ik nog niet van op de hoogte. En bedankt Wouter, voor mij is dit onderwerp weer een heel stuk duidelijker. :)
 
Wouter J

Wouter J

06/06/2012 08:02:38
Quote Anchor link
Jasper, ja je zou hem ook zo kunnen maken. Maar ik ben meer voorstander van prepared statements, vandaar dat ik dat altijd gebruik.
 
Erwin H

Erwin H

06/06/2012 09:25:49
Quote Anchor link
Roel van de Water op 05/06/2012 23:00:43:
PHP Jasper; MySQL injectie bestaat niet meer in PDO, dat wordt automatisch geregeld.
Handig :-)

Ho, stop, dat is natuurlijk niet waar. Dit is alleen het geval als je prepared statements gebruikt. Als je gewoon direct de door een gebruiker ingevoerde waarde in een SQL statement plakt dan kan je nog net zo nat gaan als bij de mysql_ functies.
 
Wouter J

Wouter J

06/06/2012 10:18:03
Quote Anchor link
En om dat te voorkomen gebruik je PDO::quote($value)
 
Erwin H

Erwin H

06/06/2012 10:37:51
Quote Anchor link
Dat is inderdaad ook een mogelijkheid. Ergo, je moet er dus wel zelf iets voor doen, het gaat niet automatisch.
 
Jasper DS

Jasper DS

06/06/2012 14:46:45
Quote Anchor link
Waarom voegen we aan de constructor ook niet het id toe? dus zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
public function __construct($id, $name, $password, $email)
    {

        $this->id = (int) $id;
        $this->name = (string) $name;
        $this->password = (string) $password;
        $this->email = (string) $email;
    }

?>


En moet er telkens aangeduid worden welk type? Ik dacht dat dat in php niet hoefde in tegenstelling tot andere programmeertalen zoals java en C.
Gewijzigd op 06/06/2012 14:47:03 door Jasper DS
 
Jeroen VD

Jeroen VD

06/06/2012 15:11:50
Quote Anchor link
hoeft niet. is misschien wel handig voor jezelf. bijkomend, typecasten zorgt ervoor dat het ook echt het type is wat jij aangeeft. voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    $var
= (int) '5'; //wordt dus ook echt een int, ipv een string
    $var = (string) 5; //wordt nu echt een string, ipv het standaard int
?>

het kan weleens handig zijn.
 
Jasper DS

Jasper DS

06/06/2012 15:15:17
Quote Anchor link
Oke, en ik vroeg me nog af waarvoor:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 $result
['id'] = (int) $id; // waarvoor dient deze regel?
?>


diende in de getById function.
 
Jeroen VD

Jeroen VD

06/06/2012 15:15:49
Quote Anchor link
een id aan de constructor? dat kan. maar hoe meer argumenten je geeft aan een object, hoe minder flexibel het wordt, vindt ik.

deze informatie-objecten (wat is de echte term voor dit?), zoals de user, waar meestal niets meer instaat dan een beetje informatie, en geen echte opdrachten uitvoert.
bij deze objecten heb ik altijd: zoveel mogelijk met getters en setters, en kun je meer doen (je wilt bv alleen een naam doorgeven, maar zou je daar voor een id ophalen?) zonder teveel te doen. beetje vaag uitgelegd, maar ik hoop dat een OOP-guru het beter kan uitleggen (of juist een andere mening heeft)

Toevoeging op 06/06/2012 15:17:03:

PHP Jasper op 06/06/2012 15:15:17:
Oke, en ik vroeg me nog af waarvoor:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 $result
['id'] = (int) $id; // waarvoor dient deze regel?
?>


diende in de getById function.

de array wordt gevuld met het id, en door het typecasten wordt ervoor gezorgd dat het ook echt een int is


Toevoeging op 06/06/2012 15:18:29:

btw, die array is al gevuld, het is het resultaat (niet goed gelezen). het moet andersom:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 $id
= (int) $result['id'];
?>
 

Pagina: 1 2 3 4 5 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.