Hoi allemaal!

Ik ben weer eens lekker aan het programmeren, en dit keer ook weer OOP-stijl. Ik was daarom van plan om een heel gebruikerssysteem te maken met OOP. Ik heb veel gehad aan de uitleg van Wouter J, en dan bedoel ik deze post: klik

Het probleem waar ik op vastloop is het volgende. Wanneer je een gebruikerssysteem hebt, dan is het natuurlijk logisch dat gebruikers weer inloggen en dat ze dan een object hebben met hun gegevens daarin.

Nu is de vraag, wát moet daar precies in, en welke methods gebruik je hiervoor? Moet je bijvoorbeeld ook gegevens als een registratiedatum, laatst actief e.d. in het object bewaren (zelfs als je ze niet gebruikt)?

M'n tweede punt is hoe je zo'n bestaande gebruiker weer terug omzet in object. Als je bij het voorbeeld van Wouter J de constructor gebruikt met een paar argumenten zoals de gebruikersnaam en het wachtwoord, dan kun je deze niet meer gebruiken om een nieuw object aan te maken waarin we gelijk alle gegevens (zoals registratiedatum) meesturen. Hoe los ik dat op? Uiteraard gebruiken we een mapper voor de communicatie tussen het gebruikersobject en de database.

Dit leek me wel een leuk discussiepunt en een leerzaam topic. Althans, voor mij :-)

Roel
== is gelijk, en === is identiek.

bv:
<?php
// geeft gelijk ondanks dat de waardes niet identiek zijn
echo (5 == '5') ? 'gelijk' : 'niet gelijk';

// geeft niet gelijk, aangezien de waardes niet identiek zijn
echo (5 === '5') ? 'gelijk' : 'niet gelijk';
?>
Klopt Phoenix, maar ik snap het voorbeeld met de hash niet.
Bij het casten van een string naar een int, dus "1234ABCD5678" zullen alleen de eerste cijfers van deze string worden omgezet in een int (wederom 1234), de rest verdwijnt (ABCD5678). 1234 is dus gelijk met == aan "1234ABCD5678", maar niet met ===, omdat de type int 1234 niet overeenkomt met de type string "1234ABCD678" ..
Het is best makkelijk uit te leggen:

1) == convert een string naar een getal als je een string vergelijkt met een getal of 2 strings met getallen vergelijkt (dus 100 == 'foo' of '100' == '245').
2) Als je een grootte int hebt wordt het een float, deze grens ligt bij 2147483647. Als je dus 2147483647 hebt wordt het int(2147483647) maar heb je 2147483650 wordt het float(214748365). Waarom? Omdat je bij hele lange getallen gaat werken met 1,00E15 en dat zijn allemaal floats. PHP bereid zich daar alvast op voor.
3) PHP kan maar in een maximaal aantal decimalen werken. Het zal dus opgegeven moment gaan afronden: 21474836513454647342523437 wordt 2,1474836513455E+25
4) Als je een afgerond getal met een afgerond getal vergelijkt zal het true opleveren, ze zijn immers beide afgerond.

Nu terug naar die hash:
<?php
"61529519452809720693702583126814" == "61529519452809720000000000000000";
// wordt
61529519452809720693702583126814 == 61529519452809720000000000000000;
// wordt
6.152951945281E+29 == 6.152951945281E+29;
// wordt
true;
?>
Ah, thanks Fuzzie! Nu snap ik het al beter, maar in deze link http://phpsadness.com/sad/47 wordt dit gesteld:


$ php -r 'var_dump("61529519452809720693702583126814" == "61529519452809720000000000000000");'
bool(true)


De ene string is blijkbaar gelijk aan de andere. Dat snap ik nog steeds niet helemaal. De getallen zijn toch verschillend?
Zie de uitleg van wouter hierboven?
Sorry, ik had de uitleg van Wouter niet gezien! :-/

Thanks Wouter, ik begrijp 'm nu! Wel lekker zoiets zeg. Jeetje. Ik hoop dat ik dat kan onthouden voor de toekomst. Thanks!!!

Reageren