OOP PHP (Constructor & parents)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Tikkes C

Tikkes C

18/07/2009 11:59:00
Quote Anchor link
Hoi iedereen,

Ik heb hetvolgende script:

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
<?php

//GETTING AND SETTING USERDATA
abstract class DataHCMS
{
    private $username;
    private $password;

    
    //CONSTRUCTOR
    protected function __construct($VARusername, $VARpassword)
    {

        $this->setUsername($VARusername);
        $this->setPassword($VARpassword);    
    }

    
    //GETTERS
    protected function getUsername()
    {

        return $this->username;
    }
    
    
    protected function getPassword()
    {

        return $this->password;    
    }

    
    //SETTERS
    final protected function setUsername($usernameSet)
    {

        $this->username = $usernameSet;    
    }

    
    final protected function setPassword($passwordSet)
    {

        $this->password = $passwordSet;
    }
    
}



//LOGINCLASS
class LoginHCMS extends DataHCMS
{
    public function LoginHCMS($VARusername, $VARpassword)
    {

        parent::__construct($VARusername, $VARpassword);    
    }

    
    public function SessionsHCMS()
    {

        $username = $this->getUsername();
        $password = $this->getPassword();
    }
}


?>



nu vraag ik me af of ik de getUsername & getPassword wel zo mag/moet oproepen in mijn LoginHCMS class...
kan iemand me dit uitleggen? ik heb wat rond zitten zoeken maar k vind niet echt degelijke voorbeelden/uitleg.

Alvast bedankt
Gewijzigd op 01/01/1970 01:00:00 door Tikkes C
 
PHP hulp

PHP hulp

17/10/2021 01:36:03
 
Ed

Ed

18/07/2009 12:10:00
Quote Anchor link
De functie parent::DataHCMS bestaat niet, waarschijnlijk wil je daar paretn::__construct aanroepen.

En omdat je extend kan je gewoon $this->getUsername() doen.
 
Tikkes C

Tikkes C

18/07/2009 12:21:00
Quote Anchor link
heel erg bedankt :)
 
TJVB tvb

TJVB tvb

18/07/2009 12:38:00
Quote Anchor link
Iets wat ik me vooral afvraag is waarom je va DataHCMS geen abstracte class maakt. Ik krijg namelijk door alleen maar private en protected functies het idee dat je niet wilt hebben dat er een losse DataHCMS gemaakt wordt.
En waarom zijn je setters private? Als ze niet mogen wijzigen maak je er een final van.
 
Tikkes C

Tikkes C

18/07/2009 13:05:00
Quote Anchor link
dus dan heb ik hetvolgende : zie code boven (aangepast aan de tips)
 
TJVB tvb

TJVB tvb

18/07/2009 13:41:00
Quote Anchor link
Ik zou die setters wel protected maken als je niet wilt dat iedereen die kan aanroepen.

Verder is het vooral de vraag wat wil je met de class doen, wat moet er mogelijk zijn?
 
Tikkes C

Tikkes C

19/07/2009 11:30:00
Quote Anchor link
zo dan? (zie code boven)

wat ik met de class wil doen is de gegevens van de gebruiker erin zetten zonder dat deze kunnen wijzigen, deze gegevens worden opgeroepen door de database uiteraard en er zullen dus nog meer dingen inkomen.

verder wil ik heb ook gebruiken om een login-class te maken en dergelijke maar aangezien de gegevens (DataHCMS) nog gebruikt zullen worden lijkt t me best om ze zo in een class te zetten...

is het dan eigenlijk niet beter dat ik de setters private maak ipv protected?
Gewijzigd op 01/01/1970 01:00:00 door Tikkes C
 

19/07/2009 11:33:00
Quote Anchor link
"Ik zou die setters wel protected maken als je niet wilt dat iedereen die kan aanroepen."

Zo zeg je het net alsof iedereen die je website bezoekt het kan opvragen :')
 
Tikkes C

Tikkes C

20/07/2009 11:56:00
Quote Anchor link
bump
 
Jelmer -

Jelmer -

20/07/2009 14:03:00
Quote Anchor link
Is LoginHCMS een DataCMS? Zo nee, niet extenden maar gewoon een instantie intern gebruiken.

Je extend nu omdat je binnen LoginHCMS* bij de gebruikersnaam van de op dat moment ingelogde gebruiker wilt? Is het dan niet logischer dat je een gebruiker-object hebt binnen je Login-class, waarbij dat gebruiker-object je de info kan verlenen?

Wat doet die DataHCMS class eigenlijk? Hij doet gebruiker-info, maar de naam doet vermoeden dat hij veel meer doet dan goed voor hem is. Ik denk dat het een beter plan is om eerst duidelijk te krijgen hoe objecten gebruikt moeten worden voordat je op zoek gaat naar een methode om een class per class die hem aanroept anders te laten werken. (antwoord is overigens: geef je ding dat niet bij die methods mag gewoon niet een object dat die methods heeft)

* Is HCMS een soort namespace, maar dan als suffix in plaats van prefix?
 
Tikkes C

Tikkes C

20/07/2009 20:30:00
Quote Anchor link
HCMS is inderdaad een suffix, verder doet de DataHCMS meer dan enkel usergegevens opslaan.

Ik ben met het extend-gedoe eens en zal er een instantie van maken intern...


Meer tips etc. zijn welkom
 
Roeltje M

Roeltje M

20/07/2009 20:33:00
Quote Anchor link
Waarom een Getter voor wachtwoord? Zoiets is toch helemaal niet nodig en kan misschien zelfs tot problemen leiden (ik ben geen OOP expert, maar dit werd me paar keer verteld).
 
Jelmer -

Jelmer -

20/07/2009 22:45:00
Quote Anchor link
Het is meer dat het geen zin heeft om het wachtwoord uit de database te halen. Waarom zou je? Je gebruikt het toch alleen binnen de query (SELECT ... FROM users WHERE nickname = %s AND password = %s) Binnen je code zal je het niet nodig hebben. In het ergste geval zet je de hash (hoop ik? Of sla je het oorspronkelijke wachtwoord op?) per ongeluk met var_dump($object) op de site.
 
Tikkes C

Tikkes C

21/07/2009 11:08:00
Quote Anchor link
ik werk (en sla op) met has - sha256 maar inderdaad die setter kan beter weg.


bedankt :)


ik heb dan nog wel in m'n login class het wachtwoord doorgegeven omdat ik daar de query zal uitvoeren...is dit goed of kan ik dit beter meteen doen vòòr ik met m'n class ga werken?
Gewijzigd op 01/01/1970 01:00:00 door Tikkes C
 
Toine vd P

Toine vd P

21/07/2009 11:15:00
Quote Anchor link
Als je geen SSL certicaat hebt (HTTPS) kun je beter zo vroeg mogelijk het te verzenden wachtwoord versleutelen (b.v. met md5()), je zou zelfs met javascript bij het submitten van een formulier eerst het wachtwooord kunnen versleutelen voordat je em daadwerkelijk verzend. Iemand die in hetzelfde netwerk als de bezoeker zit kan anders b.v. erg makkelijk het netwerkverkeer sniffen en het wachtwoord gewoon lezen.

Misschien een vleugje overdreven, maar het gaat om de mindset.
 
Tikkes C

Tikkes C

21/07/2009 11:20:00
Quote Anchor link
jah maar indien ik dit doe in javascript is het toch makkelijk te achterhalen welke encoding ik gebruik...niet?
 
Toine vd P

Toine vd P

21/07/2009 11:50:00
Quote Anchor link
een md5 hash is eenrichting encryptie. Je kunt een md5 hash niet meer de-cripten. dus het risico is dan minimaal.

Als men ziet dat het Md5 zal grotendeels van de slimmerikken al opgeven.

Dat bedoelde ik met de "mindset".

Suc6
 
Jelmer -

Jelmer -

21/07/2009 21:13:00
Quote Anchor link
Op zich maakt het voor die persoon die het netwerk zit te sniffen dan niet zoveel uit. Of hij nu je request nadoet met het echte wachtwoord, of met die hash, beide keren zal de server het accepteren en kan de sniffer inloggen.
 
Tikkes C

Tikkes C

22/07/2009 07:02:00
Quote Anchor link
en md5 IS te encrypten...zoek maar op google
 
Rens nvt

Rens nvt

22/07/2009 08:26:00
Quote Anchor link
Tikkes schreef op 22.07.2009 07:02:
encrypten...

...decrypten... :)

En ja, het kan... Maar naar mijn weten nog altijd brute force (duurt lang) of op basis van een database met hashes... Gewoon goeie passphrases gebruiken dus!
 
Afra ca

Afra ca

22/07/2009 12:11:00
Quote Anchor link
Maar je kan niet altijd van een user verwachten dat hij wachtwoorden als JKfdf443ddl gebruikt, dus wel even een SALT achter (of voor) plakken.
 

Pagina: 1 2 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.