is dit correct gebruik van OOP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Anthony de meulemeester

anthony de meulemeester

07/06/2013 18:26:00
Quote Anchor link
beste mensen,

ik ben al een tijdje bezig wat dingen in OOP te realiseren en kwam tot de ontdekking dat ik de database class vaak gebruik in andere classes via de constructor is dit normaal?

of gebruik ik de db class op de index page om gegevens op te vragen?

dit is een stukje van user class die de login gaat regelen.

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
<?php
public function login($email, $password)
    {

        $password = md5($password);
        $this->db->select('users.*', 'users', 'users.email = "'.$email.'" AND users.password = "'.$password.'"');
        
        if($this->db->numRows == 0)
        {

            $this->login = FALSE;
        
        }
else {
        
            $this->login = TRUE;
            $this->sessionId = $this->db->row('id');
            $this->db->insert('sessions', array('hash' => $this->sessionHash(), 'userid' => $this->sessionId ));
            
                setcookie('id', $this->sessionId);
                setcookie('hash', $this->sessionHash);
                header('location:index');            
        }

        
        return $this->login;
    }

?>


Toevoeging op 07/06/2013 18:28:09:

ik zie dat ik vergeten te escapen ben. regel ik nu meteen.
 
PHP hulp

PHP hulp

23/04/2024 09:04:51
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/06/2013 19:21:08
Quote Anchor link
Anthony de meulemeester op 07/06/2013 18:26:00:
ik ben al een tijdje bezig wat dingen in OOP te realiseren en kwam tot de ontdekking dat ik de database class vaak gebruik in andere classes via de constructor is dit normaal?

of gebruik ik de db class op de index page om gegevens op te vragen?

Dat laatste niet, een index page is html en heeft niks met OOP te maken.

Als je nu telkens in een constructor vaak de db class moet instantieneren dan kan je beter een basis object maken die dat doet en dan de andere objecten daarop baseren.

PS.
Output naar de browser (dus ook headers) hoort niet in een functie
Gewijzigd op 07/06/2013 19:21:49 door Ger van Steenderen
 
Anthony de meulemeester

anthony de meulemeester

07/06/2013 19:31:09
Quote Anchor link
de vraag is moet ik bijvoorbeeld

de getmessages in de db class doen? of in de message class?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/06/2013 20:05:31
Quote Anchor link
Anthony de meulemeester op 07/06/2013 18:26:00:
ik ben al een tijdje bezig wat dingen in OOP te realiseren en kwam tot de ontdekking dat ik de database class vaak gebruik in andere classes via de constructor is dit normaal?


als je dit bedoelt dan is dat normaal ja

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

class Authentication {
    private $db;

    __construct($db) {
        $this->db = $db;
    }


    public function login($email, $password) {
        $this->db->select('bla bla bla');
        // bla bla bla
    }
};


?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/06/2013 20:21:39
Quote Anchor link
Anthony de meulemeester op 07/06/2013 19:31:09:
de vraag is moet ik bijvoorbeeld

de getmessages in de db class doen? of in de message class?

In de message class.
Simpel gesteld zou je db class zou niks meer moeten doen dan een connectie maken, en een query generen en uitvoeren.
 
Anthony de meulemeester

anthony de meulemeester

07/06/2013 20:53:33
Quote Anchor link
Hoe zit het dan met de print van de messages?

ik had ze eerst geprint in de message class.

en dan op de index $blog = new messages();

$blog->showmessages();

maar nu heb ik ze op de index geprint
$db->select...
foreach...
print ....
print.....
ptint ....
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/06/2013 21:23:39
Quote Anchor link
Als je goed met OOP bezig bent zou je index.php geen enkele output naar de browser moeten bevatten!
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/06/2013 22:30:35
Quote Anchor link
Ger, dat ben ik niet per definitie met je eens. bij een framework zul je geen output genereren op je index.php. Maar dit komt met name omdat alle? frameworks naar de uri kijken en die door de routing halen om zo bij de juiste controller te komen.

Als je een eenvoudige (traditionele) opzet kiest en je geen frontcontroller hebt dan kun je heel goed je php in OOP schrijven en je html onderaan de pagina laten.

Anthony,

maak voorlopig maar een directory met de naam php.
in die directory maak je voor iedere class een bestand. in deze bestanden geen uitvoer naar het scherm.
in de root doe je dan de 'normale' php pagina's.

op de root: index.php
in php: database.php en blog.php

blog.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
include_once 'database.php';

class blog {
// alle functies die iets doen met/voor de blog
}
?>


database.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
class database {
// alle functies die iets doen met de database
}
?>


index.php:
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
<?php
include_once 'php/database.php';
include_once 'php/blog.php';

$blog = new blog();

$messages = $blog->getMessages();
?>

<html>
<head>
</head>
<body>
<h1>Berichten:</h1>
<?php
foreach($messages as $message) {
   echo '<h2>'.$message['title'].'</h2>';
   echo '<div>'.$message['message'].'</div>';
}

?>

</body>
</html>
Gewijzigd op 07/06/2013 22:31:16 door Frank Nietbelangrijk
 
Erwin H

Erwin H

07/06/2013 22:37:18
Quote Anchor link
Wat jij bedoelt Frank is het gebruik van classes binnen een PHP applicatie. Heb je het over OOP dat komt er behalve het aanmaken van een object in feite niets anders in je index.php.

OOP en het gebruik van classes is niet hetzelfde. Met beide kan je prima applicaties bouwen overigens en het 1 is niet per definitie beter dan het andere.

Wat de TS overigens van plan is is mij verder niet duidelijk. Er staat OOP, maar ik denk dat het meer gebruik van classes is en niet puur OOP.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/06/2013 23:00:15
Quote Anchor link
daar zit wel wat in Erwin, zo had ik het niet bekeken. Ik denk zelf dat TS genoeg heeft aan het gebruik van classes.
 



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.