OOP based?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

TypeScript developer (tot € 6.000, - bruto pe

Functie Om bovenstaande ambities waar te kunnen maken zijn ze op zoek naar een ervaren Typecript developer die niet alleen zichzelf verder ontwikkelt, maar het ook leuk vinden om op termijn meer junior collega’s op pad te helpen. Je zult aan de slag gaan met het migreren van hun bestaande UI in Angular. Maar ook het ontwikkelen van een mobiele app. Hierbij hechten ze veel waarde aan User Experience en kiezen ze duidelijk voor kwaliteit i.p.v. snelheid. Je krijgt dus de ruimte om vanuit gedegen onderzoek te werk te gaan en het borgen van kwaliteit staat hoog in het vaandel.

Bekijk vacature »

Medior/senior Back-end developer wanted!

Functie Because of the growth within the company, we are looking for reinforcement in the devlopmenttean. As a back-end developer you build the company software that helps us with the primary processes. A fun (internal) project in which you continuously develop the software! You will work in a small team, we have daily stand-ups and a scrum session every fortnight, led by our Scrum Master. During these sessions, you get the opportunity to present your ideas and discuss them with your fellow developers and the Product Owner. Within the development teams, we use Trello, Gitlab, Jiira, Confluence and Boockstack. They

Bekijk vacature »

Fullstack of back-end PHP developer

Functie Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten. Het team bestaat uit 4 developers, een klein team dus met korte lijnen. Alles in intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. In het team streven ze naast de hoogst haalbare kwaliteit. Hiervoor werken ze nauw met elkaar samen en levert

Bekijk vacature »

.NET Developer

Dit ga je doen Tot jouw takenpakket behoort onder andere: Webapplicaties ontwerpen, bouwen, testen en implementeren in .NET/C#.; Ontwikkelen, implementeren en beheren van maatwerkapplicaties; Onderhouden en beheren van standaardpakketten; Onderzoeken en beoordelen van nieuwe technieken. Hier ga je werken Als .NET ontwikkelaar kom je te werken bij een grote semioverheidsinstelling in Nijmegen. De organisatie staat garant voor het leveren van onderwijs en les- en onderzoeksmateriaal voor duizenden betrokkenen. De organisatie wil bijdragen aan een gezonde, vrije wereld met gelijke kansen voor iedereen. Binnen de teams hangt een open en collegiale cultuur met veel aandacht voor een prettige en sociale werksfeer.

Bekijk vacature »

.Net ontwikkelaars voor de zorgsector

Bedrijfsomschrijving Voor onze klant in de omgeving van Zwolle zijn wij op zoek naar een ervaren .Net ontwikkelaar, bij voorkeur met ervaring binnen de belangrijkste sector van Nederland, namelijk: de zorgsector. Deze internationale organisatie ontwikkelt software voor de zorgsector. Er werken zo'n 25 medewerkers hard aan een oplossing die gebruikt wordt door heel Nederland. Er heerst een informele sfeer waarbij er altijd ruimte is voor een grapje. Je collega's zijn stuk voor stuk sterke ontwikkelaars vanuit verschillende achtergronden en met verschillende leeftijden. Je komt hier terecht in een organisatie die zich hard inzet om de zorgsector te verbeteren. De mogelijkheden

Bekijk vacature »

Ontwikkelaar MS Dynamics 365 Projecten

Samengevat: Deze werkgever is de kwaliteitsdienst in de tuinbouwsector. Ben jij een ervaren ontwikkelaar? Heb jij ervaring met Ms Dynamics 365 BC? Vaste baan: Ontwikkelaar Ms Dynamics 365 BC ICT MBO 3.500 - 5.000 Ontwikkelaar Ms Dynamics 365 BC Ons bedrijf bewaakt en bevordert de kwaliteit van producten, processen en ketens in de tuinbouw. Wij kenmerken zich door openheid, ruimte voor initiatief, collegialiteit en zelfontplooiing. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Functie: Voor de vacature als Ontwikkelaar Ms Dynamics 365 BC Roelofarendsveen MBO

Bekijk vacature »

Oracle Developer / PL SQL

Dit ga je doen Software ontwikkeling aan een internationaal gebruikt pakket; Werken met technieken als Oracle 19c, Toad, PL/SQL, Oracle Forms, Reports en Designer; Meedraaien in internationale projecten; Meedenken over technisch en functioneel ontwerp; Samenwerken met collega's als Informatie Analisten, Testers en Release Managers; Soms wensen en eisen afstemmen met de business. Hier ga je werken Onze klant, een internationaal bekend bedrijf dat essentiële producten maakt waar iedereen graag gebruik van maakt, zoekt versterking in het Software Development team. Samen met 3 developers, een release manager, een informatie analist en 3 testers werk jij aan een systeem waarmee complexe producten

Bekijk vacature »

Front-end Developer - React - Data Driven

Bedrijfsomschrijving Onze klant is een snelgroeiende organisatie die een data-driven inspectieapp op de markt hebben gebracht die nu al een aantal jaar door verschillende organisaties wereldwijd gebruikt wordt. Er zijn zo'n 6 mensen werkzaam bij dit bedrijf en ze zijn nu vooral op zoek naar een sterke front-end developer die wil gaan werken aan nieuwbouw applicaties en de uitbouw van de huidige applicaties. De reden dat ze zoeken is omdat er veel werk op komst is en ze hier de juiste capaciteit voor willen hebben. Er heerst hier een hele prettige sfeer waarin respect en eerlijke communicatie belangrijk is. Ook

Bekijk vacature »

Junior Back end developer PHP, Symfony

Functie Wij hebben onlangs onze eerste collega’s aangenomen, waardoor ons development team momenteel uit 4 personen bestaat. We bouwen onze software op basis van een PHP-framework (wat op zichzelf een Symfony framework is). Qua ontwikkeling focussen wij ons op 3 focus velden; – API-ontwikkeling/ Component Creatie – Implementatie – Framework ontwikkeling; het toevoegen van nieuwe functionaliteit of interne microservices Onze senior software engineer focust zich momenteel op de laatste twee punten, maar wij komen handen te kort op het eerste veld. Daarom zijn wij op zoek naar een enthousiaste junior software engineer die graag de kneepjes van het vak wil

Bekijk vacature »

Applicatieontwikkelaar Java EE

Bedrijfsomschrijving De IV- organisatie van de Belastingdienst is verantwoordelijk voor en verzorgt de ICT- voorzieningen. Het merendeel van de applicaties wordt op dit moment door de IV- organisatie zelf ontwikkeld, onderhouden en beheerd in het eigen data center. Naast de zorg voor continuïteit op de massale heffing- en inningsprocessen die plaatsvinden binnen een degelijke, stabiele omgeving, wordt er tevens volop gewerkt aan modernisering van het IV- landschap. Dit gebeurt deels intern door gebruik te maken van de expertise die intern aanwezig is, maar ook door het aantrekken van (kant-en-klaar) oplossingen en expertise uit de markt. Functieomschrijving De afdeling IV –

Bekijk vacature »

PHP ontwikkelaar

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

Medior Front end developer React

Functie Voor deze functie ben ik op zoek naar een enthousiaste front end developer die communicatief vaardig is. Jij wordt onderdeel van een enthousiast jong team dat werkt aan grote websites. Binnen jouw rol ben jij diegene die de vertaling maakt van design naar functionele code en zorg jij voor goede experience op meerdere platformen. Dit doe je natuurlijk door gebruik te maken van Javascript, HTML, CSS en React. Daarnaast wordt er gebruik gemaakt van Webcomponents en verschillende authenticatie tools. Doordat er hier gestreefd wordt naar de beste gebruikerservaringen, wordt het product constant doorontwikkeld. Hierdoor blijven ze voor op de

Bekijk vacature »

Senior Java Developer

Als Senior Java Developer bij Sogeti ben je onderdeel van onze toonaangevende community die bestaat uit ruim 100 gepassioneerde Java professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze top-opdrachtgevers. Geen werkdag is hetzelfde! Je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfs kritische systemen voor onze klanten in regio Noordoost zoals DUO, ING, CJIB en Tendernet. Natuurlijk krijg jij de mogelijkheid je verder te certificeren in dit vakgebied. We organiseren regelmatig technische Meetups en doen veel aan kennisdeling. Sogetisten hebben plezier in hun werk en

Bekijk vacature »

Lead Fullstack developer

Functie omschrijving Ben jij een leergierige en ambitieuze junior developer met technische skills? Ben jij op zoek naar een werkgever die jouw de volledige vrijheid geeft om jezelf tot een volwaardige senior te ontwikkelen? Wij zijn op zoek naar een full stack developer die zich bezig wil bezig houden met het uitbreiden en verbeteren van de online webshop. Een onderdeel van jouw werkzaamheden is naast het beheren van de webshop ook om de processen en structuren te stroomlijnen. Werkzaamheden Onderhouden van de webshop (denk aan het bijhouden van de voorraad); Nieuwe functies toevoegen aan de product configurator door middel van

Bekijk vacature »

Front-end Developer

Front-end Developers opgelet! Bij Luminis zijn ze opzoek naar jou. Lees de vacature en solliciteer direct. Luminis is een software- en technologiebedrijf met meerdere vestigingen. Vanuit deze vestigingen werken 200 professionals aan technisch hoogwaardige oplossingen voor klanten zoals KLM, Nike en Bol.com. Ook ontwikkelt Luminis eigen oplossingen op het gebied van cloud, Internet of Things, data intelligence, e-sports en e-learning. Luminis onderscheidt zich door aantoonbaar voorop te lopen in technologie en innovatie. Luminis heeft drie kernpunten die verankerd zitten in alles wat we doen: het omarmen van nieuwe technologie, meesterschap en kennis delen. Functiebeschrijving First things first! Het is belangrijk

Bekijk vacature »
Lex van der poel

lex van der poel

21/06/2012 20:25:09
Quote Anchor link
Ik snap het denk ik eindelijk.

En voorbeeld hoe het zou moeten bij mijn site [die in verbinding staan met een spel server].

Voorbeeld:
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
|---------------------------------------------------------|
|         UserMapper        |           User              |
|---------------------------------------------------------|
| -Db                       | -Name                       |
| -Table                    | -Password                   |
|                           | -Id                         |
|                           | -Lastlogin                  |
|                           | -Money                      |
|---------------------------|-----------------------------|
| +SetDb(db)                | +SetName(name : string)     |
| +GetById(id : int)        | +GetName()                  |
| +GetByName(name : string) | +SetPass(pass : string)     |
| +Create(user : string)    | +GetPass()                  |
| +Delete(user : string)    | +SetId(id : int)            |
|                           | +GetId()                    |
|                           | +SetMoney(money : int)      |
|                           | +GetMoney()                 |
|                           | +SetLastLogin(date : string)|
|                           | +GetLastLogin()             |
|---------------------------------------------------------|

Ik hoop dat ik het zo goed heb ? zit best wel veel tijd in xD

maar hoe zit het dan met inloggen dat lijkt me dan dat je dat zo doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
+Login(user : string, password : string)

en dat dat dan true of false returnt...
of niet?
Gewijzigd op 21/06/2012 20:30:16 door Lex van der poel
 
PHP hulp

PHP hulp

27/05/2026 04:09:50
 
Wouter J

Wouter J

21/06/2012 20:31:48
Quote Anchor link
Login doe je met de UserMapper. En de objecten zien er wel goed uit. Behalve dan dat ik een constructor zou gebruiken met alles sets erin in de User. Ook zou ik een populate functie maken in de UserMapper, die zet een array om naar een User object.

Verder zijn de parameters van de login functie niet helemaal correct. De waardes, user en password, zijn eigenschappen van de user. Je maakt dus eerst een user object aan en vervolgens stop je die in de UserMapper::login() functie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// afhandeling van form
$userMapper = new UserMapper($PDO);

$user = new User($_POST['name'], $_POST['pass']);

$user = $userMapper->logIn($user);
?>

De logIn functie zal dan het user object retourneren met daarin een eigenschap loggedIn op true gezet oid. Mocht het wachtwoord verkeerd zijn wordt er een Exception (error) gegooid (throw).


Als tip wil ik nog meegeven dat je je aan een Coding standard zal moeten houden, dat maakt je code een stuk meer leesbaar voor andere developers. Coding standards zijn bijv. die van Symfony, ZEND of PEAR. Zo moet een method naam altijd beginnen met een kleine letter en een klassenaam met een hoofdletter.
 
Lex van der poel

lex van der poel

21/06/2012 20:34:40
Quote Anchor link
Oke dus ik begin het te snappen maar waar is de functie $PDO voor?

Toevoeging op 21/06/2012 20:41:42:

en kan je trouwens html gebruiken in dit forum?? want volgens mij zie ik een <hr> tag?

Toevoeging op 21/06/2012 20:57:41:

en kan dit nader uitgelegt worden was reactie van [Wouter J]
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
<?php
class Send
{
    public function query($str)
    {

        return mysql_query($str);
    }
}

class Sql
{
    // gebruik NOOIT public variabelen --- Wat bedoel je daarmee dat dit wat hieronder gebeurt onhandig is?
    public $send;

    public function __construct()
    {

        $this->send = new Send();
    }
}


$sql = new Sql();

$sql->send->query('...');
?>
 
Jasper DS

Jasper DS

21/06/2012 21:00:56
Quote Anchor link
Lex van der poel op 21/06/2012 20:34:40:
Oke dus ik begin het te snappen maar waar is de functie $PDO voor?


Kijk eens even naar pdo. PDO is de abstractie laag waar ik het al eens over had. Via PDO kan je verschillende databasen aanspreken wat het makkelijk maakt als je bijvoorbeeld moet wisselen van db.

Quote:
Toevoeging op 21/06/2012 20:41:42:

en kan je trouwens html gebruiken in dit forum?? want volgens mij zie ik een <hr> tag?

Neen, nog steeds gewoon BB-code: http://www.phphulp.nl/veel-gestelde-vragen/#bbcode

Quote:
Toevoeging op 21/06/2012 20:57:41:

en kan dit nader uitgelegt worden was reactie van [Wouter J]
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
...

Wat begrijp je nog niet?
Gewijzigd op 21/06/2012 21:01:13 door Jasper DS
 
Lex van der poel

lex van der poel

21/06/2012 21:13:29
Quote Anchor link
of deze dode:
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
<?php
class Send
{
    public function query($str)
    {

        return mysql_query($str);
    }
}

class Sql
{
    public $send;

    public function __construct()
    {

        $this->send = new Send();
    }
}


$sql = new Sql();

$sql->send->query('...');
?>

zal werken...
en watt __construct() doet.

Toevoeging op 21/06/2012 21:20:39:

Haha ik heb het door ik heb nu dit maar ga ik ombouwen tot script voor mijn website met OOP gedachtengang :P
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
<?php
class Send
{
    public function query($str)
    {

        echo $str;
    }
}

class Recive
{
    public function query($str)
    {

        echo $str;
    }
}

class Main
{
    public $send;

    public function __construct()
    {

        $this->send = new Send();
        $this->recive = new Recive();
    }
}


$main = new Main();

$main->send->query('...');
echo "<br />";
$main->recive->query('...2');
?>

output:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
...
...2
 
Wouter J

Wouter J

21/06/2012 21:38:12
Quote Anchor link
__construct is een van die hele nuttige magic methods in PHP OO. Lees anders ook eens rustig die OOP beginnershandleiding, wordt het allemaal uitgelegd...

Tevens moet je nooit een echo plaatsen in een functie, altijd retourneren en dan pas in de procedurele code beslissen wat je er mee gaat doen (opslaan in var, echo, enz.)

Tevens gebruik je bijna nooit public properties, altijd protected of private. Je moet getters en setters maken om toegang te krijgen tot die vars.

En je Main object is hier nutteloos, je moet dit gewoon in je procedurele code plaatsen.

Als laatst heb je de property $recive niet gedefinieerd in de Main klasse en is het recieve. Ook heeft deze code natuurlijk niks met je bovenstaande idee te maken...
 
Lex van der poel

lex van der poel

21/06/2012 22:15:06
Quote Anchor link
okay zal ik eens doen maar heb nu net een script gemaakt.. :P

heb ik nu gedaan kijk maar.

ik heb het nu wel gebruikt.

main object heb ik code in geplaatst.

heb ik toegevoegd en verbeterd.

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
91
92
<?php
class Main {

    function
connect($db_Host, $db_User, $db_Password) {
        $link = mysql_connect($db_Host, $db_User, $db_Password);
        if(!$link) {
            return false;
        }
else {
            return true;
        }
    }
    
    function
select($db) {
        $db = mysql_select_db($db);
        if(!$db) {
            return false;
        }
else {
            return true;
        }
    }
    
    function
login($username, $userpassword) {
        $username = @trim($username);
        $userpassword = @trim($userpassword);
        if(get_magic_quotes_gpc()) {
            $username = stripslashes($username);
            $userpassword = stripslashes($userpassword);
        }

        $username = mysql_real_escape_string($username);
        $userpassword = md5(mysql_real_escape_string($userpassword));
        $result = mysql_query("SELECT * FROM users WHERE username='" . $username . "' AND password='" . $userpassword . "'");
        if($result) {
            if(mysql_num_rows($result) == 1) {
                session_start();
                session_regenerate_id();
                $row = mysql_fetch_assoc($result);
                $_SESSION['SESS_USERNAME'] = $row['username'];
                $_SESSION['SESS_LASTLOGIN'] = $row['lastlogin'];
                $_SESSION['SESS_USERID'] = $row['ID'];
                session_write_close();
                $main->send->updateLastLogin();
                return true;
            }
else {
                return false;
            }
        }
else {
            return false;
        }
    }

    
    public $send;
    public $recieve;
    
    public function __construct() {
        $this->send = new Send();
        $this->recieve = new Recieve();
    }
}

class Send {
    public function updateLastLogin() {
        mysql_query("UPDATE users SET lastlogin = NOW() WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
    }
}

class Recieve {
    public function getUserName() {
        return $_SESSION['SESS_USERNAME'];
    }

    public function getUserId() {
        return $_SESSION['SESS_USERID'];
    }

    public function getLastLogin() {
        return $_SESSION['SESS_LASTLOGIN'];
    }
}


//---------------------- end of class----------------

$main = new Main();
if($main->connect("db-host", "db-user", "db password") === true) {
    if($main->select("db-name") === true){
        if($main->login($_POST["username"], $_POST["password"]) === true) {
            echo "You are logged in:" . $main->Recieve->getUserName();
        }
else {
            die("Username and Password combination does not match");
        }
    }
else {
        die("Unable to select database, Please contact the site administrator");
    }
}
else {
    die("Unable to connect to server, Please contact the site administrator");
}

?>
 
Wouter J

Wouter J

21/06/2012 22:22:43
Quote Anchor link
Geen die, niemand/niks gaat dood als er iets fout gaat (behalve als je spreekt van een ramp, maar dat is dit niet).

Verder wat hebben die object namen nou te maken met een user enz.? En een main object die de login regelt??
Kijk eens naar wat je hierboven nou hebt gemaakt (die tabel in de 1e post) dat lijkt toch 0 komma 0 op het geen jij hier nu hebt getypt?
Ik zie geen form afhandeling? Wat als nou iets niet is ingevuld? Waar komt $main->Recieve vandaan? Naar mijn mening is dit $main->recieve?
Wat zei ik nou? Geen publieke properties... En ook: geef het user object mee aan de UserMapper.
Verder zie ik lelijke foutonderdrukking, magic_quotes (!!!), slechte afhandeling: als Main::login() false retourneert kunnen er meer dingen fout zijn, gooi zoals al gezegd de error in het object en niet daarbuiten.

Nee, sorry als ik boos of slecht overkom. Maar als ik dit zo zie zal je eerst eens heel goed je PHP kennis moeten bijspijkeren, OO denken is echt nog 100 stappen te ver...
 
Lex van der poel

lex van der poel

21/06/2012 22:25:42
Quote Anchor link
ja idd je hebt gelijk alleen ik snapte niet meer hoe ik het login systeem moest maken voor die opbouw...

Toevoeging op 21/06/2012 22:33:03:

okay ik heb dit:
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
|---------------------------------------------------------|
|         UserMapper        |           User              |
|---------------------------------------------------------|
| -Db                       | -Name                       |
| -Table                    | -Password                   |
|                           | -Id                         |
|                           | -Lastlogin                  |
|                           | -Money                      |
|---------------------------|-----------------------------|
| +SetDb(db)                | +SetName(name : string)     |
| +GetById(id : int)        | +GetName()                  |
| +GetByName(name : string) | +SetPass(pass : string)     |
| +Create(user : string)    | +GetPass()                  |
| +Delete(user : string)    | +SetId(id : int)            |
|                           | +GetId()                    |
|                           | +SetMoney(money : int)      |
|                           | +GetMoney()                 |
|                           | +SetLastLogin(date : string)|
|                           | +GetLastLogin()             |
|---------------------------------------------------------|

ik denk dat ik nog een +Connect(dbhost : string, dbuser : string, dbpass : string)
nodig heb om met de database te verbinden dan gebruik ik +SetDb(db) om de database te selecteren. en dan +GetByName(name : string) om een array te krijgen met alle gegevens die aan het gebruikersnaam zijn gekopelt en dan controleert of het wachtwoord klopt maar wat moet ik dan doen als het wachtwoord klopt alles opslaan in een paar sessions?
Gewijzigd op 21/06/2012 22:59:09 door lex van der poel
 
Erwin H

Erwin H

22/06/2012 09:30:25
Quote Anchor link
Dat met die DB methodes zou ik anders doen. Als je ervan uit gaat dat elke class maar 1 taak heeft, dan moet de usermapper dus niet voor de databaseverbinding zorgen. De taak van de usermapper is het om de user gevevens in de database te zetten en er weer uit te halen.
Je kan dus veel beter een andere class bouwen die de database verbinding verzorgd (misschien zelfs wel splitsen in meerder classes). Die class (of classes) verzorgen dan de verbinding, het selecteren van de database en het daadwerkelijk uitvoeren van de query. De usermapper roept die class aan met de query die moet worden uitgevoerd.
 
Lex van der poel

lex van der poel

22/06/2012 13:43:06
Quote Anchor link
Maar dan heb ik de usermaper toch ook niet meer nodig want user zorgt in pricipe voor alle info van de user...
 
Erwin H

Erwin H

22/06/2012 13:59:15
Quote Anchor link
Wat mij betreft heb je user wel nodig. User is de class die intelligentie toevoegt. Die class weet wat het object user is, wat er mee kan gebeuren en bijvoorbeeld dat als iemand de leeftijd -3 wil invoeren dat dat niet zal kunnen.

De class usermapper zorgt ervoor dat de data opgehaald wordt en weggeschreven wordt. In dit geval richting een database, maar misschien in een volgende applicatie haal je het op van een andere site (en heb je dus bijvoorbeeld een cUrl actie nodig om het via de API van die andere site op te halen).

De database class zorgt weer voor de echte interactie met de database en kan je eventueel vervangen als je naar een andere database overstapt (van MySQL naar Oracle bijvoorbeeld).

Zo heeft elke class zijn eigen taak en zorgen veranderingen in een deel van je opzet, niet meteen voor veranderingen in alle classes.
 
Lex van der poel

lex van der poel

22/06/2012 14:03:41
Quote Anchor link
Hoe kan ik dan vanuit de class user de class uermaper oproepen?
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
<?php
class Main {
}

    
    public $User;
    public $UserMapper;
    
    public function __construct() {
        $this->User = new User();
        $this->UserMapper = new UserMapper();
    }
}

class User {
}

class UserMapper {
}


//---------------------- end of class----------------

$main = new Main();
if($main->connect("db-host", "db-user", "db password") === true) {
    if($main->select("db-name") === true){
        if($main->login($_POST["username"], $_POST["password"]) === true) {
            echo "You are logged in:" . $main->Recieve->getUserName();
        }
else {
            die("Username and Password combination does not match");
        }
    }
else {
        die("Unable to select database, Please contact the site administrator");
    }
}
else {
    die("Unable to connect to server, Please contact the site administrator");
}

?>



Toevoeging op 22/06/2012 14:06:12:

want met $main->User->SetName('lol'); moet het in de db worden gezet maar aangezien dat via de usermapper moet moet ik een functie aanmaken in de usermapper om die weer aan te roepen in SetName...
Gewijzigd op 22/06/2012 14:09:10 door lex van der poel
 
Erwin H

Erwin H

22/06/2012 14:13:53
Quote Anchor link
Er zijn meerdere manier om dat te doen.
1) Bij de construct van de User geef je een object van class UserMapper mee. Die sla je op in een property en elke keer dat er interactie nodig is roep je een methode aan via het property.

2) Je roept vanuit User de UserMapper niet aan, maar bij het ophalen van gegevens in de UserMapper creeer je een object van class User waar je direct de net opgehaalde gegegevens aan meegeeft.

3) User en UserMapper zien elkaar helemaal niet, maar vanuit de controller (of flat php bestand) wordt eerst de UserMapper aangeroepen om data op te halen die daarna doorgegeven wordt aan een object van class User.

En er zijn vast nog wel meer mogelijkheden, net wat het beste werkt in jouw applicatie. De eerste zou ik gebruiken als je verwacht veel interactie nodig te hebben, zoals bijvoorbeeld ook updates en je dus niet alleen maar gegevens hoeft op te halen.
 
Lex van der poel

lex van der poel

22/06/2012 14:29:35
Quote Anchor link
zou je een voorbeeld van de eerste optie kunnen laten zien?
 
Erwin H

Erwin H

22/06/2012 15:07:44
Quote Anchor link
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
<?php

class User_Mapper{
  public function getUser( $userid ){
    //deze functie haalt de user gegevens op en returned het
  }
}


class User{

  private $userMapperObj;
  private $userData;

  public function __construct( User_Mapper $obj ){
    $this->userMapperObj = $obj;
  }


  public function populate( $userid ){
    $this->userData = $this->userMapperObj->getUser( $userid );
  }

}

?>

In de construct van User heb ik dus ook via een typehint aangegeven dat het object dat meegegeven moet worden van het type User_Mapper moet zijn. Als je het echt netjes doet geef je daar als typehint echter een interface mee en niet een class. Op die manier kan je namelijk verschillende classes schrijven die dezelfde interface implementeren. Waarbij een class de gegevens vanuit de database haalt, de ander via een externe website. Zelfs als je nu niet verwacht dit te gaan doen is het raadzaam om interfaces te gebruiken, omdat je dan veel flexibeler bent.
 
Lex van der poel

lex van der poel

23/06/2012 16:47:34
Quote Anchor link
ik heb er nu all een heele tijd mee lopen klooien alleen ik snap het nog steeds niet die code hierboven is er geen tutorial?

Toevoeging op 23/06/2012 17:12:02:

ik heb al een oplossing gevonden bedankt.

Toevoeging op 23/06/2012 18:49:26:

dit begint er toch al meer op te lijken?
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<?php
session_start();
class Main {
    
    public $User;
    public $UserMapper;
    public $DataBase;
    
    public function __construct() {
        $this->User = new User();
        $this->UserMapper = new UserMapper();
        $this->DataBase = new DataBase();
    }
}

class User {
    public function CheckLogin() {
        if(isset($_SESSION['SESS_USERNAME'])) {
            return true;
        }
else {
            return false;
        }
    }

    public function GetName() {
        return $_SESSION['SESS_USERNAME'];
    }

    public function SetName($str) {
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(1, $str);
    }

    public function GetPass() {
        return $_SESSION['SESS_USERPASSWORD'];
    }

    public function SetPass($str) {
        $str = md5($str);
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(2, $str);
    }

    public function GetMoney() {
        return $_SESSION['SESS_USERMONEY'];
    }

    public function SetMoney($str) {
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(3, $str);
    }

    public function GetId() {
        return $_SESSION['SESS_USERID'];
    }

    public function SetId($str) {
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(4, $str);
    }

    public function getLastLogin() {
        return $_SESSION['SESS_LASTLOGIN'];
    }

    public function SetLastLogin($str) {
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(5, $str);
    }

    public function UpdateLastLogin($str) {
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(6);
    }
}

class UserMapper {
    function
Query($str, $str1) {
        if($str === 1) { // Sets Username
            mysql_query("UPDATE users SET username = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_USERNAME'] = $str1;
        }

        if($str === 2) { // Sets Password
            mysql_query("UPDATE users SET password = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_USERPASSWORD'] = $str1;
        }

        if($str === 3) { // Sets Money
            mysql_query("UPDATE users SET money = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_USERMONEY'] = $str1;
        }

        if($str === 4) { // Sets UserID
            mysql_query("UPDATE users SET ID = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_USERID'] = $str1;
        }

        if($str === 5) { // Sets Lastlogin
            mysql_query("UPDATE users SET lastlogin = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_LASTLOGIN'] = $str1;
        }

        if($str === 6) { // Updates Lastlogin
            mysql_query("UPDATE users SET lastlogin = NOW() WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $sql = mysql_query("SELECT lastlogin FROM users WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_LASTLOGIN'] = $sql;
        }
    }
    function
Login($username, $userpassword) {
        $username = @trim($username);
        $userpassword = @trim($userpassword);
        if(get_magic_quotes_gpc()) {
            $username = stripslashes($username);
            $userpassword = stripslashes($userpassword);
        }

        $username = mysql_real_escape_string($username);
        $userpassword = md5(mysql_real_escape_string($userpassword));
        if ($username === "") {
            return 3;
        }
elseif ($userpassword === "") {
            return 4;
        }
else {
            $result = mysql_query("SELECT * FROM users WHERE username='" . $username . "' AND password='" . $userpassword . "'");
            if($result) {
                if(mysql_num_rows($result) == 1) {
                    session_regenerate_id();
                    $row = mysql_fetch_assoc($result);
                    $_SESSION['SESS_USERNAME'] = $row['username'];
                    $_SESSION['SESS_LASTLOGIN'] = $row['lastlogin'];
                    $_SESSION['SESS_USERID'] = $row['ID'];
                    $main->send->updateLastLogin();
                    return 1;
                }
else {
                    return 2;
                }
            }
else {
                return 5;
            }
        }
    }
    function
Delete($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }

        $str = mysql_real_escape_string($str);
        $sql = mysql_query("DELETE FROM users WHERE username='" . $str . "'");
        if(!$sql) {
            return false;
        }
else {
            return true;
        }
    }
}

class DataBase {
    function
Connect($db_Host, $db_User, $db_Password) {
        $link = mysql_connect($db_Host, $db_User, $db_Password);
        if(!$link) {
            return false;
        }
else {
            return true;
        }
    }
    function
Select($str) {
        $db = mysql_select_db($str);
        if(!$db) {
            return false;
        }
else {
            return true;
        }
    }
}


//---------------------- end of class----------------

$main = new Main();
if($main->DataBase->Connect("localhost", "root", "root") === true) {
    if($main->DataBase->Select("mysql") === true) {
        if($main->User->CheckLogin() === false){
            echo "please login";
        }
else {
            echo"welcome";
        }
    }
else {
        echo"<html><head><title>Error</title></head><body><center><h1>Error: " . mysql_error() . "</h1></center></body></html>";
    }
}
else {
    echo"<html><head><title>Error</title></head><body><center><h1>Error: " . mysql_error() . "</h1></center></body></html>";
}

session_write_close();
?>
 
Lex van der poel

lex van der poel

24/06/2012 18:44:19
Quote Anchor link
bumb
 
Roel -

Roel -

24/06/2012 22:11:44
Quote Anchor link
Wouter J op 21/06/2012 21:38:12:
__construct is een van die hele nuttige magic methods in PHP OO. Lees anders ook eens rustig die OOP beginnershandleiding, wordt het allemaal uitgelegd...

Tevens moet je nooit een echo plaatsen in een functie, altijd retourneren en dan pas in de procedurele code beslissen wat je er mee gaat doen (opslaan in var, echo, enz.)

Tevens gebruik je bijna nooit public properties, altijd protected of private. Je moet getters en setters maken om toegang te krijgen tot die vars.

En je Main object is hier nutteloos, je moet dit gewoon in je procedurele code plaatsen.

Als laatst heb je de property $recive niet gedefinieerd in de Main klasse en is het recieve. Ook heeft deze code natuurlijk niks met je bovenstaande idee te maken...


Beetje tegenstrijdig wat je nu zegt. Een paar maanden geleden zei jij tegen me dat je in een method nooit een echo plaatst, behalve in een layout method o.i.d..
 
Wouter J

Wouter J

25/06/2012 09:16:45
Quote Anchor link
Inderdaad, in ene Layout method of een view helper mag dit, alleen dat gaat in dit geval niet op en soms hou ik alles wat makkelijker voor dan het is. Je moet niet teveel willen vertellen in 1 keer.

Lex, waarom stap je niet af van die Main klasse? Dat maakt de hele boel onduidelijk.

En tevens lijkt de UserMapper nog steeds niet op het geen je in Post 1 had, het geen goed was. Kijk eens naar deze reactie van Pim, of deze reactie van mij. Misschien dat het dan wat begrijpelijker wordt.
 
Roel -

Roel -

25/06/2012 13:42:25
Quote Anchor link
Oké, alleen omdat je het dikgedrukt had leek het me een beetje tegenstrijdig.
Ik snap 'm nu.
 



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.