OOP gedachtengang

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior PHP developer

Functie Jouw werkzaamheden zullen grotendeels bestaan uit het in teamverband ontwerpen, vernieuwen en door ontwikkelen van het systeem. Het is echt back-end werk (bijvoorbeeld het doorontwikkelen van een API) en dit moet je dan ook liggen. Ze zijn niet persee gebonden aan talen of tools maar gebruiken graag de technieken die het beste aansluiten op de gegeven oplossing. Voor nieuwe (versies van) componenten maken ze veelal gebruik van Go(lang). Bij aanpassingen aan bestaande onderdelen gebeurt dit in PHP en C++. Het team is heel divers, er hangt een relaxte sfeer en ze organiseren regelmatig leuke music nights, game nights e.d.

Bekijk vacature »

.NET developer WO niveau voor predictive software

Bedrijfsomschrijving Dit bedrijf uit Den Bosch is om precies te zijn 15 medewerkers groot en ze ontwikkelen (predicitve) planning software. Dit doen zij voor allerlei mooie en bekende organisaties (bierbrouwerijen, gemeentes, oliemaatschappijen en diverse multinationals). Wegens meer en grotere vraag vanuit de klanten komen er nu posities vrij voor onder andere een .NET developer. Het bedrijf is goed met openbaar vervoer te bereiken. Functieomschrijving Je komt hier te werken in een team van 3 .NET developers en bent betrokken bij het gehele ontwikkelproces. Dus van idee naar ontwerp en van ontwikkeling tot testen en implementatie. Bij voorkeur ben je niet

Bekijk vacature »

Ervaren Full stack developer

Functie omschrijving Ben jij op zoek naar een uitdagende in-house functie bij een bedrijf met enorme groeipotentie? Ben jij op zoek naar een nieuwe uitdaging vol afwisseling en gezelligheid? Dan ben je bij dit bedrijf aan het juiste adres! Wij zijn in omgeving Breda op zoek naar een ervaren full stack developer. Je gaat werken voor een zeer gewilde werkgever met goede arbeidsvoorwaarden. Je krijgt een plekje in het jonge IT team, work hard, play hard is hier duidelijk het motto! Jouw werkzaamheden zien er als volgt uit: Jij bent verantwoordelijk voor het ontwerpen en bouwen van webapplicaties. Je bent

Bekijk vacature »

Front-end developer (Angular)

Functie Het team bestaat uit een architect, fullstack developers, app developers, de product owner en projectmanager. Eenieder draagt vanuit zijn discipline bij aan een complete oplossing voor de klant. Uiteraard zul je hierin nauw samenwerken met je collega’s. Jij wordt verantwoordelijk voor de front-end implementatie en fungeert als lead op dit gebied binnen het team. Je kunt helder formuleren, ideeën uitdragen en overbrengen aan je collega’s. Qua technische stack is het vooral van belang dat je ervaren bent met Angular, HTML5, CSS en TypeScript. Verder is ervaring in NgRx, Bootstrap, BEM en Cypress een pré, evenals affiniteit met UX/UI Design!

Bekijk vacature »

.NET developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Medior/Senior Software Developers gezocht in de Ra

Functie Op dit moment staan er posities open voor de volgende functies: Front-end, Back-End & Fullstack software developer. Als Front-End software developer werk je met JavaScript en de bijbehorende technologieën zoals TypeScript, Angular, React, Vue en Svelte. Als Back-End software developer ben je bezig in NodeJS en doe je dit met behulp van AWS, NoSQL, REST en GraphQL. Je krijgt leuke en uitdagende opdrachten met een gemiddelde duur van anderhalf jaar. Hier werk je in een team met andere IT’ers aan het ontwikkelen en verbeteren van software. Je wordt begeleid door een accountmanager die fungeert als jouw aanspreekpunt. Het team

Bekijk vacature »

C#.NET developer

Functieomschrijving Wij zijn op zoek naar een gepassioneerde Full Stack C#.NET Software Developer. Als Software Developer ben je verantwoordelijk voor het ontwikkelen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere ontwikkelaars en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Testen en valideren van de ontwikkelde software. Ontwikkelen en onderhouden van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je gaat aan de slag met diverse technologieën en frameworks. Denk hierbij aan C#, JS frameworks, HTML, CSS, TypeScript,

Bekijk vacature »

Experienced Lead Java Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Delft Vacature ID: 13301 Introductie We are seeking a Lead Java Developer for our team in the area of Delft. You will develop an application used exclusively by the engineers and geologists for site characterizations, which imports raw field and laboratory measurements for further processing, integration, ground modelling, and geotechnical analysis and reporting. The client/server application is entirely written in Java, and the server is hosted in the Amazon cloud, utilizing frameworks such as Spring and Hibernate, and connected to an MS SQL Server RDS instance. There is a trend towards using more

Bekijk vacature »

Senior .NET developer

Functie Als Senior .NET ontwikkelaar ga jij aan de slag in ons Research & development team. Ons team bestaat uit 17 collega’s! Wij zijn momenteel druk bezig met het opzetten van een geheel nieuwe architectuur voor een nieuw product. Hierbij maken wij o.a. gebruik van VS2022 en .NET 6.0. Jouw functie is dan ook voornamelijk backend georiënteerd bij ons. Aangezien wij meetapparatuur ontwikkelen voor de chemische industrie is het ook erg belangrijk om kwalitatief hoogwaardige software te ontwikkelen voor de besturing hiervan. Verder ben jij verantwoordelijk voor het designen, implementeren en testen van nieuwe features. Ook zorg jij voor toekomstbestendige

Bekijk vacature »

Lead developer (PHP, Symfony, DDD)

Functie Als Lead developer zorg je ervoor dat het team (bestaande uit zowel junior als ervaren developers) in staat is om de kwaliteit van de software (en code) verder te verhogen. In samenwerking met het team, de product owner en de andere lead developers zet je technische lijnen uit en bepaal je de prioriteiten per sprint. Lijkt het jou interessant om complexe problemen op te lossen en bijvoorbeeld een nieuwe applicatiestructuur in Symfony op te zetten? Dan komen wij graag met je in contact. Eisen • HBO werk- en denkniveau (ze kijken niet naar papieren, maar naar denkniveau, motivatie en

Bekijk vacature »

Grafisch vormgever

Standplaats: Maasland Aantal uren: 32 – 40 uur per week Opleidingsniveau: HBO werk- en denkniveau Ben jij een ambitieuze grafisch vormgever met een passie voor creativiteit en oog voor detail? Vind jij het daarnaast leuk om ook marketingactiviteiten op te pakken? Dan zijn wij op zoek naar jou! Bedrijfsinformatie Westacc Group BV is het zusterbedrijf van HABA en specialiseert zich in (maatwerk) oplossingen voor (elektro) techniek en verlichting in de kampeerbranche. Zij produceren en assembleren onderdelen voor caravans, campers en boten. Voor een groot aantal caravan- en campermerken leveren wij producten als zekeringkasten, invoerdozen, acculaders, schakelmateriaal en verlichting. De producten

Bekijk vacature »

C# .NET Developer

Dit ga je doen Je richt je op het doorontwikkelen en herstructureren van het platform; Je werkt in teamverband en zelfstandig aan uitdagende projecten voor verschillende klanten; Softwareontwikkeling middels C# .NET; Je staat in contact met verschillende opdrachtgevers om de klantwensen te bespreken en deze vervolgens te ontwikkelen; Verbeteren van bedrijfsprocessen; Implementaties. Hier ga je werken Als .NET Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet

Bekijk vacature »

Oracle APEX Ontwikkelaar (3.500-6.000 euro)

Bedrijfsomschrijving Ben jij een getalenteerde Oracle APEX ontwikkelaar met minimaal één jaar ervaring in het ontwikkelen van Oracle APEX-applicaties? Ben je gepassioneerd over het ontwikkelen van bedrijfskritische oplossingen en wil je werken bij een toonaangevend consultancybedrijf? Dan zijn wij op zoek naar jou! Deze organisatie beschikt over zowel inhouse als externe projecten, maar bovenal over een sterk team en netwerk van opdrachten waardoor jij jezelf verder kunt ontwikkelen. Het team bestaat uit een aantal junior en medior developers, maar vooral uit senioren. De business unit managers binnen het team zijn mensen die hun vak verstaan en zelf als Oracle APEX

Bekijk vacature »

PHP Developer

Dit ga je doen Ontwikkelen, implementeren en testen van PHP-oplossingen en Apps voor klanten en bedrijfsprocessen; Opstellen van requirements en uitwerken van de oplossingen; Testen van software en borgen van een soepele overdracht, inclusief documentatie; Proactief adviseren vanuit eigen expertisegebied over ontwikkelingen en verbeterpunten in technische toepassingen en processen binnen de organisatie. Hier ga je werken De organisatie is een ambitieuze en vooruitstrevende speler in de markt in de regio Rotterdam. Ze zijn de snelst groeiende in hun branche. Met een excellent aanbod en service willen zij de beste keuze zijn voor hun bestaande en nieuwe klanten. Dit alles doen

Bekijk vacature »

C# Developer

Dit ga je doen Je gaat aan de slag in het websites team of portals team waarin je je bezighoudt met concept & design, implementatie en ook een stukje bugfixing en onderhoud; Je werkt met je team volgens de Scrum werkwijze; Zo adviseer je ook de PO & Scrum Master over de technische architectuur, koppelingen en integratie met externe systemen en API’s; Je blijft op de hoogte van de laatste ontwikkelingen en trends op het gebied van C# / .NET en deelt deze kennis binnen de organisatie. Hier ga je werken Onze klant is een internationale organisatie gevestigd in de

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

29/03/2024 00:10:58
 
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.