OOP gedachtengang

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.Net ontwikkelaar gezocht in omgeving Weert

Bedrijfsomschrijving Onze opdrachtgever is één van de meest innovatieve en leuke organisaties van Zuid-Nederland. Vanuit hun kantoor in de buurt van Weert werken ze voor verschillende opdrachtgevers aan de realisering van zeer complexe projecten. Zo bouwen ze webbased maatwerk software, websites, webshops en creëren ze de vormgeving en content voor een aantal grote namen. Binnen het team heerst er een nuchtere sfeer, de focus ligt op het afleveren van goed werk waarbij er volgens de laatste trends en technologieën ontwikkeld wordt. Functieomschrijving Samen met ongeveer 4 collega’s zal jij per project een team vormen. Ieder heeft zijn eigen sterke kracht

Bekijk vacature »

Junior Oracle / JAVA Developer traineeship in Utre

Bedrijfsomschrijving Deze organisatie is gespecialiseerd in Oracle, E-business, CRM en Java oplossingen! Vele professionals zijn hier werkzaam en zij werken aan uitdagende langdurige projecten bij diverse klanten. De focus momenteel ligt op het werven van junioren die net klaar zijn met hun HBO of WO opleiding en affiniteit hebben met Oracle en JAVA. Wil jij hierin een echte professional worden en een mooi opleidingstraject aangaan? Lees dan zeker even verder. Functieomschrijving Mijn klant biedt recent afgestudeerden de mogelijk tot het leren van Oracle Pl/SQL en JAVA programmeren. Tijdens een intensief opleidingstraject van enkele weken wordt je geleerd om databases te

Bekijk vacature »

Scala Developer Security

Bedrijfsomschrijving Voor een dynamische en snelgroeiende organisatie in Den Haag zijn wij op zoek naar een back-end developer met interesse in security vraagstukken. Deze organisatie richt zich op het ontwikkelen van een online platform waar persoons- en bedrijfsgevoelige informatie veilig kan worden uitgewisselt en opgeslagen. Binnen de organisatie voegt iedereen vanuit zijn eigen expertise iets toe en staat zelfsturing hoog in het vaandel. Zij werken via het domain driven design principe waarbij zij binnen het betreffende domein met alle disciplines sparren over de inrichting van het platform en het oplossen van problemen. Het platform wordt ontwikkeld in Scala binnen een

Bekijk vacature »

Medior C#.Net Developer

Bedrijfsomschrijving Deze organisatie is werkzaam in de e-commerce branche. Het is een snel groeiende internationale organisatie met ambitieuze medewerkers en ambitieuze groeiplannen. Het is een dynamische omgeving met veel uitdagende projecten. De organisatie is volledig overgegaan op de Agile werkwijze. Naast de twee huidige scrumteams zijn zij bezig met het opzetten van een derde scrumteam. Daarom zijn ze op zoek naar een fullstack .NET Software Engineer / Developer. Ze zoeken een Software Engineer / Developer die het leuk vindt applicaties helemaal opnieuw op te bouwen en zich bezig te houden met doorontwikkeling. Maar die het daarnaast ook leuk vindt om

Bekijk vacature »

Software Developer C#

Organization Within business line Applications, software groups address the area of complex machine control software. You will be end-to-end responsible for realization of software in C# . This is done using a scrum/Agile way of working. As a Software Developer you will act as fast learning software professional, and contribute to software realization using a disciplined agile/scrum based way of working. You apply software engineering practices such as requirements engineering (user story definition), object oriented analysis and design, implementation in C#, testing, and integration. You are eager to pick up knowledge on semiconductor fab automation and throughput models. What are

Bekijk vacature »

Backend C# Developer gezocht voor medische applica

Bedrijfsomschrijving Wil jij werken voor een organisatie die actief is in de branche van medische applicaties? En ben jij een Backend C# Developer met minimaal 2 jaar ervaring? Dan ben je hier aan het juiste adres! Je komt terecht in een team van zo'n 30 man sterk, waarvan ongeveer de helft op de IT afdeling werkt. Deze afdeling bestaat uit o.a. Developers, Data Scientisten/Specialisten en Designers. De gemiddelde leeftijd is laag (rond de 33) en de werknemerstevredenheid is hoog. Iedereen is trots op wat hier gemaakt wordt en iedereen zet zich elke dag in voor een gezondere samenleving. Iedereen werkt

Bekijk vacature »

SAP FS-PM Developer DevOps

Bedrijfsomschrijving For our client in Rotterdam, we are looking for a SAP developer with experience in FS-PM (Financial Services – Policy Management). Within the Pensions department, you get to work in one of ten SAP teams. This department is responsible for all of the pension administration services, including general and client-related processes. Increasing customer satisfaction is one of the most important goals of the organization. Together with your team, you ensure that the pension administration service runs as smoothly and as automated as possible. Functieomschrijving Are you a SAP developer with experience in an Insurance company? Do you have experience

Bekijk vacature »

.NET Developer Zorg-ICT

Complexe software ontwikkelen: dat is jouw ding! Voor onze vestiging in Hoogeveen zoeken wij fanatieke junior en senior .NET Developers die met de laatste Microsoft-tools en -technieken willen werken. Jij bent gemotiveerd en draagt graag verantwoordelijkheid voor je 'eigen' software, die wordt ingezet in ziekenhuizen door heel Nederland. Jouw baan Je bent verantwoordelijk voor het ontwerpen, ontwikkelen, ondersteunen en onderhouden van jouw eigen module. Dit gaat om complexe ICT-producten die feilloos moeten functioneren binnen de complexe omgeving van een zorgorganisatie. Je werkt zelfstandig of in een klein team. ChipSoft maakt gebruik van een zelf ontwikkeld multi tier framework. Tijdens een

Bekijk vacature »

Azure DevOps Engineer

AzureDevOps Engineer Functiebeschrijving: Loop jij ook altijd met je hoofd in de Cloud? En weet jij met jouw kennis en ervaring innovatieve en betrouwbare Cloud omgevingen te realiseren? Dan zit je goed bij CGI! Wat ga je doen? Als AzureDevOps Engineer help je onze klanten om hun bestaande applicaties te moderniseren en deze te migreren en aan te sluiten op de private- of public Cloud. Samen met collega’s binnen het DevOps team geef je antwoord op complexe Cloud vraagstukken en ben je verantwoordelijk voor de geautomatiseerde releases van een veilige IT infrastructuur van onze klanten. Wat breng je mee? Je

Bekijk vacature »

Java developer (medior & senior)

Op zoek naar leuke collega's waarmee je kunt lachen, gave projecten en een ambitieuze werkgever die heel goed voor je zorgt? Aangenaam: Profit4Cloud! Wij zijn nu met 55 collega's en werken sinds 2015 vanuit 5 vestigingen aan mooie projecten met een fijne groep collega's die allemaal maar één ding willen: mooie en slimme software-oplossingen ontwikkelen met de nieuwste technieken. We zijn goed bezig en zijn daarom op zoek naar versterking: Java Software Engineers met ervaring in back-end en front-end software ontwikkeling. Ben jij de Java Software Engineer die enthousiast wordt van mooie projecten waar binnen jij een belangrijke rol speelt?

Bekijk vacature »

Medior Front-End Developer

Als medior Front-End Developer bij Coolblue verbeter je de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Hoe word ik Medior Front-end Developer bij Coolblue? Als Medior Front-end Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Je krijgt energie van het bedenken van creatieve oplossingen en presenteert dit graag binnen het team. Ook ben je trots op je werk en verwelkomt alle feedback. ‘’Ook Medior Front-end Developer worden bij Coolblue? Else de Boer legt je uit hoe je dat doet.’’

Bekijk vacature »

IT-Traineeship junior software programmeur

Zoek jij een stevige uitdaging en de mogelijkheid om veel nieuwe dingen te leren in een dynamisch vakgebied? Doe mee aan ons IT Professional Program en ontwikkel jezelf tot software engineer! Je begint met een opleidingstraject van ongeveer 4 maanden. Hierin ga je aan de slag met verschillende technieken die je op conceptueel niveau leert te overzien en interpreteren. Onderwerpen die aan bod komen zijn o.a. programmeren (Java/C#/Python), Object Oriëntatie, Databases, Webservices & webtechnologieën, Domain Driven Design en Continuous Integration/Continuous Delivery. Sommige van deze onderdelen sluit je af met een examen en bijbehorende certificering. Het opleidingstraject zelf sluit je af

Bekijk vacature »

Ervaren .NET developer gezocht, api development, .

Ben je een ervaren .NET developer en op zoek naar baan waarbij je je ook meer kunt gaan richten op architectuur? Binnen een leuke, sociale en betrokken werkomgeving? Met technieken als .NET Core en Azure? Dan zou deze baan wellicht iets voor jou kunnen zijn. Voor een organisatie in Rotterdam zijn we op zoek naar eens ervaren .NET ontwikkelaar. De organisatie bevindt zich in de financiële branche en is een van de grotere spelers in hun vakgebied. De organisatie bestaat uit circa 600 medewerkers en heeft verschillende vestigingen in Nederland. Het hoofdkantoor zit in Rotterdam en daar is ook de

Bekijk vacature »

Mobile App Developer

Ons Mobile ontwikkelteam zoekt een fanatieke Mobile App Developer. Ben jij creatief en heb je passie voor het ontwikkelen van apps? Dan zijn wij op zoek naar jou! Jouw baan ChipSoft heeft al diverse apps uitgebracht en het aantal gebruikers hiervan neemt snel toe. De apps doen het erg goed bij de zorginstellingen. Je kunt hierbij denken aan apps verpleegkundigen, thuiszorgmedewerkers, de logistieke dienst en - natuurlijk - de artsen zelf. Door jouw hands-on mentaliteit, eigenwijsheid en technisch inzicht kun je nauwkeurig herbruikbare software schrijven. Die software sluit naadloos aan op onze ‘back end’ (HiX, onze ICT-totaaloplossing voor de zorg).

Bekijk vacature »

Systeembeheerder VMware Welkomstbonus € 5.000

Systeembeheerder VMware senior Welkomstbonus van € 5.000,- Bij T2 zorgen we goed voor elkaar en doen wij leuke dingen met leuke mensen. We zorgen voor uitdagende opdrachten zodat jij jezelf onbeperkt kan blijven ontwikkelen. Ben jij een ervaren systeembeheerder VMware en wil je het beste uit jezelf halen? Dan ben je van harte welkom bij T2 en ontvang je onze welkomstbonus ter waarde van € 5.000,-. Er werken leuke mensen bij T2, die op een professionele en informele wijze met hun carrière en collega’s omgaan. Dat is de basis voor succes! Het is vanzelfsprekend dat je met de nieuwste technieken

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

27/01/2021 01:52:42
 
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.