Is mijn class een goede class?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Aapje yeah

Aapje yeah

23/01/2010 21:42:00
Quote Anchor link
Hallo mensen ik ben pas begonnen met OO programmeren in php... ik weet alleen niet of ik het nu goed heb gedaan of niet (A) zou iemand mij wat tips kunnen geven?

Midas:
'var' is PHP 4. Die mag je dus weglaten. :-)

Karl:
Het is netter om een apart db class te maken.

Storeman:
Je moet bedenken dat je een echte gebruiker hebt en wat deze kan doen.


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
<?
class user {
    private $uId;        // The user id
    private $uName;        // The user name
    private $uPass;        // The user password
    
    private var $qLimit;    // The limit for an query
    
    /* Functions to set values */
    // These functions sets data for uId, uName, uPass en qLimit

    function set_uId ($value) {
        $this->uId        =    $value;
    }
    function
set_uName ($value) {
        $this->uName    =    $value;
    }
    function
set_uPass ($value) {
        $this->uPass    =    $value;
    }
    function
set_qLimit ($value){
        $this->qLimit    =    $value;
    }

    
    // Functions to use data
    // This function creates an user.
    // Needs atleast uName and uPass to be set

    public function createUser() {
        mysql_query("INSERT INTO users (uName, uPass) VALUES ('".$this->uName."','".$this->uPass."')");
    }

    
    // This function deletes an user
    // Needs atleast uId to be set

    public function deleteUser() {
        mysql_query("DELETE FROM users WHERE uId='".$this->uId."'");
    }

    
    // This function selects 1 or more users
    // Needs for normal atleast the limit and for specific the uId

    public function selectUser ($type) {
        if($type == 'specific'){
            mysql_query("SELECT * FROM users WHERE uId='".$this->uId."'");
        }
elseif($type == 'normal'){
            mysql_query("SELECT * FROM users LIMIT ".$this->qLimit);
        }
    }
}

?>


alvast bedankt =D

EDIT:::

Oke ik heb de tips een beetje gelezen ik hoop dat ik het nu beter heb gedaan:
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
<?

class user extends dbConnect {
    private $uId;        // The user id
    private $uName;        // The user name
    private $uPass;        // The user password
    
    /* Functions to set values */
    // These functions sets data for uId, uName, uPass en qLimit

    function set_uId ($value) {
        $this->uId        =    $value;
    }
    function
set_uName ($value) {
        $this->uName    =    $value;
    }
    function
set_uPass ($value) {
        $this->uPass    =    $value;
    }

    
    // Functions to use data
    public function create() {
        if(empty($this->uName) || empty($this->uPass)){
            return 'The username or password was not set.';
        }
else {
            $sql    =    "INSERT INTO users (uName, uPass) VALUES ('".$this->uName."', '".$this->uPass."')";
            parent::query($sql);
        }
    }

    
    // This function needs atleast uId to be set
    public function delete() {
        if(empty($this->uId)){
            return 'User id was not set.';
        }
else {
            $sql    =    "DELETE FROM users WHERE uId='".$this->uId."'";
            parent::query($sql);
        }
    }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Aapje yeah
 
PHP hulp

PHP hulp

23/11/2024 11:11:34
 

23/01/2010 22:01:00
Quote Anchor link
Het is netter om een apart db class te maken.
Dit is meer procedurele code met een naampje er omheen.
 
Niels K

Niels K

23/01/2010 22:05:00
Quote Anchor link
Je kan beter voor je database functies een interface maken.
 
Aapje yeah

Aapje yeah

23/01/2010 22:16:00
Quote Anchor link
Karl zou je een voorbeeld willen maken hoe jij het zou doen?
 

23/01/2010 22:18:00
Quote Anchor link
Nope.
(Nu niet.)
Gewijzigd op 01/01/1970 01:00:00 door
 
Midas

Midas

23/01/2010 22:21:00
Quote Anchor link
'var' is PHP 4. Die mag je dus weglaten. :-)
 
Storeman storeman

storeman storeman

23/01/2010 23:03:00
Quote Anchor link
De functienamen deleteUser en createUser zijn vreemd.

de functie delete() is logisch, dan verwijder je een user. Verder mis ik de constructor.

De selectUser functie hoort hier niet te zitten. Je object is een gebruiker, een gebruiker kan geen gebruiker selecteren. Dat is niet logisch. Wat zou een gebruiker verder nog kunnen... bijvoorbeeld:

zoekVriend( $naamVriend )
heeftToestemming(...)
logIn(..)
logUit(..)

Je moet bedenken dat je een echte gebruiker hebt en wat deze kan doen. Ik denk dat je nog iets verder in de manier van denken moet duiken, maar je bent op de goede weg!
 
Aapje yeah

Aapje yeah

24/01/2010 09:11:00
Quote Anchor link
Oke bedankt voor je comment Storeman daar heb ik wat aan (Y)
 
Danny K

Danny K

24/01/2010 10:52:00
Quote Anchor link
Naast de bovenstaande opmerkingen vraag ik me af of je echt iets uit je databse wilt verwijderen. Ik denk namelijk dat het beter is om een UPDATE uit te voeren en een veld te zetten. Bijvoorbeeld: deleted = 1
Dan moet je gewoon in je select even een extra stukje in de WHERE clausule plaatsen.

Een class stelt iets voor, bijvoorbeeld een gebruiker.
Een gebruiker heeft niets met een database te maken dus het extenden van een database class geeft aan dat je ontwerp niet klopt of dat jij het principe nog niet begrijpt.

Daarnaast is het in 99,99% van de gevallen niet nodig om het wachtwoord van de gebruiker ergens op te slaan, zoals in dit geval in een class.
Het wordt eenmaal gebruikt: controle gebruiker!
Als dat klopt is het wachtwoord verder niet meer nodig en mocht het ooit nodig zijn dan vraag je het gewoon opnieuw.

Succes!
 
Aapje yeah

Aapje yeah

24/01/2010 11:55:00
Quote Anchor link
Hoe moet ik het dan doen bijv: log in en log uit. ik dacht dat het zo was: een gebruiker is een object bijv Timmeh. En dan wat je allemaal met Timmeh zou kunnen doen? klopt dit of niet?
 
Joren de Wit

Joren de Wit

24/01/2010 12:52:00
Quote Anchor link
Tim Lijster schreef op 24.01.2010 11:55:
En dan wat je allemaal met Timmeh zou kunnen doen? klopt dit of niet?
Niet wat je met een gebruiker kunt doen, maar juist wat die gebruiker zelf kan. Een object weet in principe alleen dingen over zichzelf en kan alleen dingen doen die op zichzelf betrekking hebben...

Inloggen is een kwestie van controleren of opgegeven gebruikersnaam en wachtwoord overeenkomen met die uit de database. Zo ja, dan is de gebruiker ingelogd. Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
public function logIn($username, $password) {
  // Als $username en $password correct zijn, is gebruiker ingelogd
}
?>

Als het inloggen gelukt is, zou je bijvoorbeeld het User object kunnen retourneren, in het andere geval retourneer je false.
 
Aapje yeah

Aapje yeah

25/01/2010 11:47:00
Quote Anchor link
Ok dus ik had het nog een beetje fout (A)

Dus wat ik bijvoorbeeld in de class moet doen met een gebruiker die bijv bij een foto boek een foto kanuploaden
logIn()
logOut()
addPicture()

Of moet ik dan een class voor het uploaden van een plaatje een apparte picture class moeten hebben?
 
Joren de Wit

Joren de Wit

25/01/2010 12:10:00
Quote Anchor link
addPicture() hoort niet in een User class thuis, hij weet immers alleen dingen over zichzelf niets over een afbeelding. Je zult dus een apart object moeten gebruiken dat het toevoegen van een afbeelding verzorgt, bijvoorbeeld dus een Picture object.

Aangezien een Picture geüpload wordt door een User, is die User een eigenschap van het Picture object.
 
Aapje yeah

Aapje yeah

25/01/2010 14:13:00
Quote Anchor link
Oke thx Ik denk dat ik het nu begrijp (Y)
 



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.