OOP gedachtengang

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Advanced Mendix Developer Order Management Systeme

Advanced Mendix Developer Order Management Systemen (NL) Den Haag HBO/WO IT Professional "Als Advanced Mendix Developer impact maken op de groeiende e-commerce markt? Je doet dit bij PostNL door met je DevOps team onze Mendix applicaties verder te ontwikkelen, waarbij je complexe logistieke business processen vertaalt naar applicaties die ons primaire proces ondersteunen". Wat ga je doen? PostNL wordt een postal tech company We nemen de ontwikkeling van onze IT applicaties in eigen hand door onze eigen software-ontwikkel-capability op te zetten. Als Advanced Mendix Developer ben je onderdeel van een multidisciplinair, agile werkend Business-IT-team. Samen met dit team bouw je onze logistieke IT-applicaties verder

Bekijk vacature »

Ervaren C#/Azure developer werkt mee aan backend p

Voor een innovatieve bouwonderneming die al meer dan 113 jaar bestaat, zijn wij op zoek naar ervaren .Net/C#/Azure developers. Het bedrijf bouwt een (pre-fab) huizenfabriek die 4000 woningen per jaar kan produceren. Deze woningen worden dan modulair op de bouwplaats in elkaar gezet en worden met duurzame (recyclebare) materialen gemaakt en geplaatst. Dit zonder PFAS en zeer weinig NOX. Als .Net developer maak je deel uit van een multidisciplinair team met andere .net developers, BI consultant, systeem- en applicatiebeheerders. Je gaat meebouwen aan de middleware-laag waar 30+ applicaties (waaronder erp systemen) gekoppeld kunnen worden. Deze integraties komen samen op het

Bekijk vacature »

Sogyo zoekt medior software developer

Sogyo zoekt software engineers die klaar zijn voor de volgende stap! Heb jij de eerste stappen in je IT carrière gezet en ben je op zoek naar verdieping en verbreding van jouw kennis en vaardigheden in software engineering, lees dan verder! Sogyo biedt jou een traject waarin jouw ontwikkeling als software engineer centraal staat. Je start met een opleiding van 2 à 3 maanden op maat gemaakt naar jouw niveau en wensen. Belangrijk hierin is de combinatie van concepten, frameworks en tooling. De onderwerpen komen aan bod middels workshops, lectures, individuele opdrachten en een eindproject. Je krijgt een begeleider toegewezen

Bekijk vacature »

.NET ontwikkelaar / Azure

Bedrijfsomschrijving Als onderdeel van een grote IT-dienstverlener is deze organisatie nu gegroeid tot een organisatie van bijna 30 man groot. Iedereen binnen deze organisatie houdt zich bezig met het ontwikkelen, beheren, onderhouden van bedrijfskritische applicaties. De organisatie ontwikkelt applicaties voor o.a. diverse grote zorgverzekeraars, maar ook de wat kleinere lokale bedrijven worden door deze organisatie ondersteund. In tegenstelling tot de moederorganisatie, werken de medewerkers bij deze organisatie gemiddeld drie tot vier dagen in de week gewoon op het eigen kantoor in Utrecht. Samen met een vast team ben je dus verantwoordelijk voor verschillende projecten die je veelal op één en

Bekijk vacature »

Java Developer / Big Data / Microservices

Bedrijfsomschrijving Bij dit grote, innovatieve technische bedrijf wil men graag flink groeien dit jaar, namelijk van zo'n 100 naar 120 mensen. In de afgelopen jaren is er hard gewerkt om een nieuw software product op de markt te zetten ter ondersteuning van hun fysieke producten en omdat dit een groot succes is, wordt het nu uitgerold over het hele bedrijf en daarmee een groot deel van de wereld. Er is dus werk aan de winkel! Jij werkt in het back-end team dat ervoor zorgt dat grote hoeveelheden data van de bron naar de front-end worden gebracht in het juiste formaat.

Bekijk vacature »

Full Stack Developer / .NET

Bedrijfsomschrijving Deze organisatie is gesitueerd in de omgeving van Zwolle en is actief binnen de financiële dienstverlening voor klanten. Ze is actief op twee locaties, één in de Randstad en één in het Noordoosten van het land. Voor de locatie in de regio Zwolle, waar ongeveer 35 collega's werken, zijn zij op zoek naar een medior Full Stack Developer. Het betreft een dynamische omgeving waar collega's prettig en informeel met elkaar omgaan. De organisatie houdt zich grotendeels bezig met het ontwikkelen van financiële applicaties welke onder andere bestaan uit een CRM, DMS, diverse klantportalen en calculatie software. Als Full Stack

Bekijk vacature »

Platform & Device Developer

You will work on many dynamic projects as a Platform & Device Developer, in which you can express your creativity. How do I become a Platform & Device Developer at Coolblue? As Platform & Device Developer, you are responsible for building and developing the platforms on which all Coolblue employees work. You are inquisitive and never shy away from a challenge. You like to know why certain systems or processes have been developed the way they have and conduct some research to improve them. You talk to different stakeholders and developers to see if your new solution works. In this

Bekijk vacature »

Developer Python Azure Financial Organisation

Bedrijfsomschrijving You will work with a major bank in the Netherlands that is digitalizing very quick. The IT department is facing enormous challenges and works on new initiatives to improve the business. This vacancy is in the IT department that is focused on Risk Enterprises. This department builds systems and models, which help the business to calculate, predict and prevent risks for internal and external customers. You will work in within a team that is end-to-end responsible for the RAP platform, a data lake used for (Credit Risk) Data Modelling purposes. The team is working fully Agile DevOps and has

Bekijk vacature »

Senior Software Developer Control Tower (NL)

Senior Software Developer Control Tower (NL) Den Haag HBO/WO IT Professional Als Senior Java/Kotlin Developer Control Tower bij PostNL Pakketten impact maken op de groeiende E-commerce markt met onze logistieke software. Je doet dit door complexe bedrijf kritische logistieke business processen te vertalen naar de ontwikkeling en uitbreiding van onze Cloud IT-platformen en software oplossingen. Wat ga je doen? Supply chain logistiek is de wetenschap en kunst van het controleren en beheren van de stroom van middelen, informatie en goederen van de ene bestemming naar de andere. Een essentiële vereiste voor het bereiken van operational excellence in een supply chain

Bekijk vacature »

Front-End Developer Design System

Samen met andere developers en designers bij Coolblue maak jij onze webshop elke dag een beetje beter om zo onze klanten blij te maken. Wat doe je als Front-End Developer Design System bij Coolblue? Bij Coolblue speelt het Design System team een belangrijke rol in het garanderen van de beste klantreis. Het team werkt samen met Designers en Developers om een ​​verzameling tried and true bouwstenen, patronen en richtlijnen op te bouwen. Je werkt aan de gebruiksvriendelijkheid van onze webshop en bent ervan overtuigd dat mooi design voor iedereen toegankelijk moet zijn. Je krijgt energie van het bedenken van creatieve

Bekijk vacature »

Support medewerker

Als Support medewerker bij Prosoftware zorg je ervoor dat zorgverleners optimaal gebruik kunnen maken van onze softwareproducten. Je bijt je helemaal vast in de gebruikersvragen die de klant meldt: je analyseert de situatie en legt je gevonden oplossing uit aan de klant. We zoeken een analytische doorzetter die het leuk vindt om ons softwareprogramma voor de zorg van A tot Z te leren kennen. Je bent samen met vier helpdeskcollega's het visitekaartje van het bedrijf en je doorgrond samen de complexe administratieve processen in de zorg. Onze klanten zijn werkzaam in de zorg en niet computer-minded en dat verdient een

Bekijk vacature »

PHP Developer / Drupal / Symfony / API's

Bedrijfsomschrijving Voor onze klant, een vooruitstrevend en informeel bedrijf in het zuiden des lands, zoeken wij een ervaren PHP Developer. Het bedrijf, dat bestaat uit zo'n 25 mensen, maakt slimme online oplossingen voor diverse klanten in de regio maar ook internationaal. Voor grote hoeveelheden data gebruiken ze een Drupal gebaseerd platform en hieraan wordt ontwikkeld met PHP, Symfony en Javascript. Ook werk je aan koppelingen met andere applicaties via API's. Er lopen diverse toffe projecten waar je als ervaren ontwikkelaar aan bij kan dragen, zo loopt er momenteel een internationaal project waarin data vanuit een grote telescoop wordt gecentraliseerd in

Bekijk vacature »

High Tech Software Developer (C#.NET)

(Senior) High Tech Software Developer (C#.NET) (C#/ .NET. / WPF/Prism. Winform/CAB, WCF) Intro Are you a Software Professional and do you have experience in developing software in an object-oriented way using C#/ .NET? And do you have profound knowledge of full system software development from the embedded platform up-to the operator facing applications. Then I have the perfect position for you! For our client, a fast-dynamic technical company, we are looking for several Senior Software Developers (C#.NET). You will be part of the Software team, You will be end-to-end responsible for realization of software in C# in the software department,

Bekijk vacature »

GIS Developer

Bedrijfsomschrijving Als GIS Developer kom je te werken bij een high-tech ingenieursbureau in de regio van Utrecht. Al ruim 15 jaar werken ze aan de eigen ontwikkeling van innovatieve applicaties op het gebied van mobiliteit en infrastructuur. Met al hun jaren ervaring bedenken en ontwikkelen ze geografische oplossingen voor grote en bekende organisaties in Nederland. Momenteel maken duizenden gebruikers gebruik van hun applicaties en proberen ze constant vernieuwend te zijn in hun aanbod naar klanten. Je komt te werken in een informeel Agile minded team van 25 collega's, waarvan 6 andere (GIS) developers. Als Developer ben je in teamverband verantwoordelijk

Bekijk vacature »

Mendix Advanced Developer (NL)

Mendix Advanced Developer (NL) Den Haag HBO/WO IT Professional "Als Mendix Advanced Developer impact maken op de groeiende E-commerce markt met onze logistieke software en onze kritieke logistieke keten. Je doet dit door ontwikkeling en uitbreiding van onze Mendix Cloud omgeving, waarbij je complexe business processen vertaalt naar kritieke Mendix applicaties.". Wat ga je doen? PostNL is becoming a postal tech company Als Mendix Advanced Developer ben je onderdeel van een multidisciplinair Business-IT-team bestaande uit onder andere een Lead, Mendix Developers en Solution Consultants. Wij zetten Mendix in voor kritieke processen waarbij applicaties optimaal moeten performen om dagelijks rond 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

20/04/2021 03:21:47
 
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 | wouter@phphulp.nl | 1         |
| 2  | Jasper | h356gh21 | jasper@phphulp.nl | 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', 'koen@phphulp.nl');
$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.