OOP based?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java developer (remote)

Functie Wat ga je doen als Java Developer? Jij als Java ontwikkelaar komt te werken in 1 van onze SCRUM teams. Momenteel werken er zo’n 30 ontwikkelaars binnen onze organisatie waarbij jij de brug slaat tussen het bouwen van verschillende functionaliteiten binnen onze applicaties en deze vervolgens te integreren in onze centrale hub. Je start je dag om 9 uur met een stand up en dan pak je jouw taken op voor de dag. Hieronder een aantal taken die jij zal uitvoeren: – Het bedenken en uitbouwen van features binnen de verschillende applicaties – Onderhouden van CI/CD pipelines – Bezighouden

Bekijk vacature »

C# .NET Software Ontwikkelaar

Functie omschrijving Gezocht: Software Developer C# .NET voor een dynamische organisatie! Ben je onlangs afgestudeerd of ben je toe aan de volgende stap in je professionele carrière? Lees dan verder! We zijn momenteel op zoek naar een Software Developer die klaar is voor een nieuwe uitdaging en die onze eindklant in de regio Arnhem kan versterken. In deze functie werk je aan verschillende projecten en bezoek je vaak klanten. Je kunt een rol verwachten met veel uitdaging, diversiteit en verantwoordelijkheid. Bedrijfsprofiel Binnen welke organisatie ga je aan de slag? Je gaat werken bij een organisatie die zich specialiseert in het

Bekijk vacature »

API Developer Red Hat Fuse

Dit ga je doen Als API Developer zal je verantwoordelijk zijn voor het: het maken van API's en het correct laten draaien van de API's op het platform. Hierdoor kom je in aanraking met Red Hat Fuse, Springt Boot, 3Scale, Red Hat SSO, Openshift en Azure DevOps; zorgen voor de kwaliteit van de ontwikkeling, integratie en prestaties van de API's; zorgen voor een stabiel integratieplatform. Hier ga je werken Deze organisatie is een toonaangevende speler in de vastgoedbranche en telt momenteel ruim 500 medewerkers. Met meer dan 150 applicaties staat er een complex applicatielandschap dat hoofdzakelijk op OpenShift, Azure en

Bekijk vacature »

Front end ontwikkelaar

Functie Het huidige team bestaat uit momenteel uit 5 back end developers verdeeld van senior tot junior. Omdat de gehele front end van applicaties anders gaan insteken zijn ze op zoek naar een ervaren Front end developer die hen kan helpen de juiste keuzes te maken. Je krijgt veel vrijheid om te bepalen hoe je dit wilt ontwikkelen en vrijheid in welke techniek je hiervoor wilt gebruiken. Je zult je dus bezighouden met architectuur, documentatie en natuurlijk ontwikkeling van nieuwe functionaliteiten binnen de verschillende applicaties. natuurlijk heb jij ook mogelijkheden om te sparren binnen het team, maar ze gaan uit

Bekijk vacature »

In-house .NET software developer

Functie omschrijving Ben jij op zoek naar een uitdagende in-house development functie? Maak jij graag hét verschil m.b.t. interne automatisering? Haal jij energie uit het automatiseren van processen voor je eigen collega's? Dan hebben wij de perfecte vacature voor je! Voor een gezellig Brabants familiebedrijf, zijn wij op zoek naar een .NET software developer. Je gaat in deze zelfstandige functie werken aan de ontwikkeling van eigen applicaties & en het koppelen van deze applicaties aan de ingekocht software. Jouw werkzaamheden zien er als volgt uit: Het management team signaleert behoeftes vanuit de business. Vervolgens worden deze behoeftes uitgewerkt en geprioriteerd.

Bekijk vacature »

Medior .NET Ontwikkelaar

In het kort Als .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan we deze uitdaging graag met

Bekijk vacature »

Traineeship Fullstack developer (WO, 0 tot 3 jaar

Functie Zoals beschreven ga je vanaf start aan de slag bij een passende opdrachtgever, hierbij kijken ze echt naar jouw wensen, kennis/ervaring maar ook de reisafstand. Momenteel hebben ze meerdere klanten waarbij ze groepen hebben opgezet wat maakt dat er diverse uitdagende kansen liggen. Naast het werken bij de opdrachtgever, en het volgen van de masterclasses, zul je regelmatig met de andere trainees in contact zijn. Niet alleen op professioneel vlak maar juist ook bij de borrels en kwartaaluitjes! Kortom; een jaar lang hard aan jezelf werken in combinatie met gezelligheid en plezier. Spreek dit jou aan? Dan komen we

Bekijk vacature »

Als Front-end developer samenwerken met de beste c

Functie Momenteel zijn we voor één van de projecten bij hun key partner, een voorloper in de energiesector, op zoek naar gedreven Front-end developers. Ze nemen de lead in dit project en werken uitsluitend met vooruitstrevende technologieën. Ze verwachten dat de technologie die hier wordt ontwikkeld uiteindelijk door veel meer grote corporates, in verschillende sectoren zal worden toegepast. Dit is dan ook een heel uitdagend project om aan mee te gaan werken. Het team bestaat o.a. uit User Experience designers, Data Scientists en Software Engineers. De consultants en ontwikkelaars werken volgens de Design Thinking methode waarbij de eerste stappen van

Bekijk vacature »

C# .NET Developer

Functieomschrijving Voor dit leuke softwarre bedrijf in de omgeving Vught zijn we per direct op zoek naar een C#/.NET Developer. Is development jouw passie en doe je dit graag met C#/.NET? Lees dan snel verder! Jou werkzaamheden zullen zijn: Zorgen voor de optimalisatie van de huidige software en het automatiseren van bedrijfsprocessen. Naar aanleiding van de wensen van de klant ga je, met je collega's op zoel naar passende oplossingen en je werkt dit uit tot een mooi eindproduct. Je gaat webshops, websites en webapplicaties ontwikkelen door middel van ASP.NET, C# en MVC Framework. Bedrijfsprofiel Deze opdrachtgever houdt zich bezig

Bekijk vacature »

Medior Java developer (fullstack)

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

Bekijk vacature »

Java Developer

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

Bekijk vacature »

PHP Developer

Functieomschrijving Wij zijn op zoek naar een PHP Developer met Laravel ervaring! Voor een groeiende werkgever in regio Breda zijn wij op zoek naar een medior PHP developer met Laravel ervaring. Je gaat aan de slag met het ontwikkelen van maatwerk software voor klanten in een specifieke markt. Als PHP developer ben je samen met een gemotiveerd team van 6 collega’s verantwoordelijk voor de ontwikkeling, beheer en het innoveren van informatiesystemen voor klanten in een specifieke branche. Als software developer ondersteun je complexe uitdagingen van klanten. Je brengt hun wensen in kaart en vertaalt deze door naar maatwerk software. Om

Bekijk vacature »

Ambitieuze medior developer

Wat je gaat doen: Heb jij al een paar jaar ervaring als developer maar wil jij naar the next level? In ons NextLevelDev Programma helpen wij jou om de volgende stap te zetten: een mooi programma aan trainingen op het gebied van Java, hippe frameworks, Agile/Scrum, OCP-certificering en optioneel: andere JVM-talen als Kotlin en Scala; Cloud (AWS, Azure, GCP) Soc Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun

Bekijk vacature »

.NET developer

Functie Als developer heb jij de keuze om aan te sluiten bij het team (13 developers) die op locatie projectmatig bij klanten werkt. Wanneer jij liever intern bij de werkgever werkt is er ook alle ruimte voor jou in het interne team (8 developers) van dit bedrijf. Je werkt samen aan verschillende projecten bij of voor de klant. Het project wordt aangeleverd door sales aan de project manager. Die maakt samen met de Resourcer een planning en op basis daarvan wordt uit het development team een “projectgroep” opgesteld. Hoeveel en welke projecten jij wilt oppakken gebeurt geheel in samenspraak met

Bekijk vacature »

Developer Low-code

Dit ga je doen Low-code ontwikkeling van software voor landelijk bekende organisaties; Opleveren van mooie eindproducten, middels de Agile methodiek; Samenwerken in een team van 10 collega's; Direct contact met de eindklant over de gewenste oplossingen. Hier ga je werken Als Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven. De

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

24/11/2024 16:17:33
 
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.