Vanuit class een andere class benaderen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Write Down

Write Down

06/02/2011 11:24:21
Quote Anchor link
Hallo,

Ik ben momenteel een user-class aan het ontwerpen. Het is te zeggen, ik splits dit op in twee aparte classes: User_Store & User_Authenticate. De eerste, User_Store, dient voor het toevoegen, verwijderen en bewerken van gebruikers. De twee class, die dient om in te loggen. Deze kijkt dus nu af een user bestaat, of het password matched etc. Nu wanneer ik een gebruik wil toevoegen, (User_Store) dien ik te weten of die gebruiker al dan niet al bestaat. Wat lijkt jullie de beste manier om dit te doen. Ik bedoel dan niet, met welke query, maar hoe benader ik beste de andere class.

Overigens, zouden jullie nog een aparte class gebruiken? Bv. een class User_Info. (die aan de hand van het user-id / username / email, de gegevens van een gebruiker kan ophalen)
 
PHP hulp

PHP hulp

26/10/2021 10:57:45
 
Tikkes C

Tikkes C

06/02/2011 12:40:27
Quote Anchor link
Waarom het niet in 1 klasse houden?

class:User
vars: name, ...

methods:
-userAdd(name,...)
-checkLogin()
-...


want uiteindelijk zijn dit acties van users en hoeft het niet in een andere klasse te staan.
 
Jelmer -

Jelmer -

06/02/2011 12:46:02
Quote Anchor link
Ik zou de store meegeven aan je auth-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
<?php

class User_Auth
{
    protected $_user_store;

    public function __construct($user_store)
    {

        $this->_user_store = $user_store;
    }


    public function login($email, $password)
    {

        $user = $this->_user_store->checkLogin($email, $password);
        
        if (!$user)
            return false;
        
        $_SESSION['user_id'] = $user->id();

        return true;
    }
}


$users = new User_Store();
$auth = new User_Auth($users);

if ($auth->login('jelmer@phphulp.nl', 'password'))
    echo "Jeej!";
?>
 
Write Down

Write Down

06/02/2011 12:59:01
Quote Anchor link
@Tikkes,

Ik ben van mening dat de methode die jij gebruikt geen OOP is. Dan zit je namelijk met één object, dat eigenlijk veel verschillende functies heeft, dus je class is niet meer dan een verzameling functies. Als je alles opbreekt in verschillende classes, vereenvoudig je ook het onderhoud. Maar goed, dat is mijn mening. Als jij het op die methode doet, voor mij even goed hé ;-). (overigens deel ik eigenlijk alles nog niet genoeg op, in principe zou ik nog een paar aparte classes kunnen uitvinden)

@Jelmer
Dat lijkt me een vrij goede opzet. Maar hoe zou jij dan het volgende doen:

In mijn class User_Store heb ik een method addUser($aUser). Ik wil dus uiteraard controleren of die user al dan niet al bestaat. Zou je dan het volgende doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
public function addUser($aUser) {
 $user_existst = new User_Auth(Database:getInstance());
 if($user_exists->userExistst($aUser[0])) {
   //gebruiker bestaat
 } else {
   //aanmaken gebruiker
 }
}

?>
 
Tikkes C

Tikkes C

06/02/2011 13:01:50
Quote Anchor link
Ter verdediging: User_auth is geen object maar meer gewoon een functie. Dan kan je evengoed een file "functions.php" aanmaken en het daarin zetten. Maar goed...;) ieder zijn ding.
 
Jelmer -

Jelmer -

06/02/2011 13:14:02
Quote Anchor link
De User_Store is verantwoordelijk voor de opslag en beheer van Users, dus die zou zelf moeten kunnen controleren of de User niet al een keer voorkomt. Volgens mij is daar User_Auth niet voor nodig.

@Tikkes C: Dan verdedig is dat User_Auth meer dan slechts een functie is, het is dat ding dat ervoor verantwoordelijk is dat een user zich bekend gemaakt heeft. Onderdeel van die taak is iemand identificeren, en vervolgens onthouden als wie deze gebruiker zich heeft geïdentificeerd. Ik zou zeggen dat dat toch een redelijke taakomschrijving is, meer dan slechts een functie. Ter vergelijking, een functie is meer iets dat een bewerking doet op een bepaalde datastructuur wat een nieuwe datastructuur tot gevolg heeft. Het liefst is zo'n functie deterministisch en stateless, zoals in de wiskunde :P Dat zijn de echt mooie functies.
Gewijzigd op 06/02/2011 13:15:42 door Jelmer -
 
Write Down

Write Down

06/02/2011 14:11:26
Quote Anchor link
@Jelmer

Ik heb er een "ja en nee" gevoel bij. bij User_Auth moet je namelijk de mogelijkheid hebben om een user te "selecteren". Dus in de opzicht, stoort het me deels.
 
Pim -

Pim -

06/02/2011 14:34:46
Quote Anchor link
@Jelmer, wat in PHP is 'door de goden bepaald' en niet deterministisch dan? ;)

@Write Down
Auth komt van authentication, het proces waarbij wordt bepaald of de gebruiker is wie hij zegt dat hij is. Of een gebruiker al staat ingeschreven heeft daar niets mee te maken.

Toevoeging op 06/02/2011 14:34:47:

@Jelmer, wat in PHP is 'door de goden bepaald' en niet deterministisch dan? ;)

@Write Down
Auth komt van authentication, het proces waarbij wordt bepaald of de gebruiker is wie hij zegt dat hij is. Of een gebruiker al staat ingeschreven heeft daar niets mee te maken.
 
Jelmer -

Jelmer -

06/02/2011 14:49:19
Quote Anchor link
Pim - op 06/02/2011 14:34:46:
@Jelmer, wat in PHP is 'door de goden bepaald' en niet deterministisch dan? ;)


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

function magic($x)
{

    static $state;
    
    if ($state === null)
        $state = 1;

    return $state = $state * $x;
}


echo  magic(2), "\n"
    , magic(2), "\n"
    , magic(2), "\n";
?>

magic is niet deterministisch, want het antwoord is niet langer slechts afhankelijk van de invoer bij de aanroep.
 
Write Down

Write Down

06/02/2011 15:33:44
Quote Anchor link
@Pim

Ik denk niet dat je alles hebt doorgelezen. En toegeven, ik ben niet overal even duidelijk. In mijn eerste bericht spreek ik trouwens zelf al over "User_Authenticate".

Pim:
Of een gebruiker al staat ingeschreven heeft daar niets mee te maken.


Daar ben ik het niet mee eens. Wanneer jij probeert in te loggen met een gebruiker die niet bestaat, dan lukt dat niet. In je query staat dus een zoekopdracht naar die bepaalde gebruiker.
 
Jelmer -

Jelmer -

06/02/2011 15:50:21
Quote Anchor link
De User_Store zelf kan toch prima de verantwoordelijkheid hebben te bepalen of een gebruiker bestaat of niet? Het lijkt me juist dat het object dat verantwoordelijk is voor het inloggen aan een User_Store vraagt of hij gebruiker X kent.
 
Write Down

Write Down

06/02/2011 16:40:53
Quote Anchor link
Ik denk dat uiteindelijk het eenvoudigst zal zijn. Bedankt voor jullie mening / raad.
 



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.