is dit correct gebruik van OOP
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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;
}
?>
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.
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?
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
de getmessages in de db class doen? of in de message class?
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
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?
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.
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 ....
Als je goed met OOP bezig bent zou je index.php geen enkele output naar de browser moeten bevatten!
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)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
include_once 'database.php';
class blog {
// alle functies die iets doen met/voor de blog
}
?>
include_once 'database.php';
class blog {
// alle functies die iets doen met/voor de blog
}
?>
database.php:
index.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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>
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
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.
daar zit wel wat in Erwin, zo had ik het niet bekeken. Ik denk zelf dat TS genoeg heeft aan het gebruik van classes.