Codes laten controleren
Onlangs ben ik super goed geholpen hier op het forum met een probleem die ik had met OOP. Daarbij kreeg ik zelfs de tip om i.p.v. de MySQLi class de PDO class te gebruiken. Mijn script werkt nu bijna helemaal. Het is een script die wielerwedstrijden (de naam er van) en de afgelegde afstand uit de database haald. Het is niet echt nuttig, maar ik maak het vooral om OOP te leren.
Ik wil even weten wat jullie er van vinden, en misschien kunnen jullie nog foutjes vinden?
Alvast heel erg bedankt!
CLASS_LIB.PHP
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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
<?php
/* --------------------------------------------------------------------- */
/* CLASS: cycle */
/* Returns all races and distances and adds new races to the database */
/* --------------------------------------------------------------------- */
class cycle
{
var $database1; // Holds the database connection
var $races; // Holds the races in an array
var $distances; // Holds the distances in an array
function __construct()
{
// Connect to database
$this->database1 = new PDO('mysql:host=localhost;dbname=oop-scripts', 'root', 'Ati12ev');
}
// Returns all races from the database into an array
function getRaces()
{
$this->races = $this->database1->query("SELECT race_name FROM races");
return $this->races->fetchAll(PDO::FETCH_ASSOC);
}
// Returns all distances from the database into an array
function getDistances()
{
$this->distances = $this->database1->query("SELECT distance FROM races");
return $this->distances->fetchAll(PDO::FETCH_ASSOC);
}
// Adds a new race to the database
function newRace()
{
}
}
?>
/* --------------------------------------------------------------------- */
/* CLASS: cycle */
/* Returns all races and distances and adds new races to the database */
/* --------------------------------------------------------------------- */
class cycle
{
var $database1; // Holds the database connection
var $races; // Holds the races in an array
var $distances; // Holds the distances in an array
function __construct()
{
// Connect to database
$this->database1 = new PDO('mysql:host=localhost;dbname=oop-scripts', 'root', 'Ati12ev');
}
// Returns all races from the database into an array
function getRaces()
{
$this->races = $this->database1->query("SELECT race_name FROM races");
return $this->races->fetchAll(PDO::FETCH_ASSOC);
}
// Returns all distances from the database into an array
function getDistances()
{
$this->distances = $this->database1->query("SELECT distance FROM races");
return $this->distances->fetchAll(PDO::FETCH_ASSOC);
}
// Adds a new race to the database
function newRace()
{
}
}
?>
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
22
23
24
25
26
27
28
29
30
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
include_once("lib/cycle_racing/class_lib.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OOP Scripts</title>
</head>
<body>
<table width="250px" cellpadding="0" cellspacing="0" border="0">
<th>Race name</th><th>Distance</th>
<?php
$cycle = new cycle;
$races = $cycle->getRaces();
$distances = $cycle->getDistances();
$i = 0;
foreach($races as $race)
{
echo '<tr><td>'.$race['race_name'].'</td><td>'.$distances[$i]['distance'].'</td></tr>';
$i++;
}
?>
</table>
</body>
</html>
include_once("lib/cycle_racing/class_lib.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OOP Scripts</title>
</head>
<body>
<table width="250px" cellpadding="0" cellspacing="0" border="0">
<th>Race name</th><th>Distance</th>
<?php
$cycle = new cycle;
$races = $cycle->getRaces();
$distances = $cycle->getDistances();
$i = 0;
foreach($races as $race)
{
echo '<tr><td>'.$race['race_name'].'</td><td>'.$distances[$i]['distance'].'</td></tr>';
$i++;
}
?>
</table>
</body>
</html>
Gewijzigd op 14/04/2011 16:53:34 door Ruben Portier
Voor de rest is dit te weinig om op te reageren. Dit is niet zozeer OO als meer een classe. OOP wordt pas interessant als je meerdere classes hebt.
Wat betreft de interne code; is het niet beetje zonde om 2 queries te doen uit dezelfde tabel? Waarom niet gewoon "SELECT race_name, distances FROM races"
Gewijzigd op 14/04/2011 16:49:30 door Gerben Jacobs
Deze OOP is inderdaard een beetje weinig om het echt een OO script te kunnen noemen. Maar ik ben nog maar aan het leren. Het lijkt me dus best om klein te beginnen.
Ik zal allereerst inderdaad die query even aanpassen. Volgens jouw mag die var $database1 weg? En dan die $races en $distances mogen ook weg, en dan moet ik daar iets anders van maken. $result ofzo? Bedankt in ieder geval!
Zeer erg bedankt!
EDIT:
Ik heb mijn code aangepast en hij werkt nu nog altijd zeer goed! Ik heb de functie getRaces en getDistances samen moeten hangen omdat dit toch 2x hetzelfde was. Dit is dan ook niet echt een handig iets om OOP voor te gebruiken. Misschien dat jullie nog ideeën hebben waarmee ik goed OOP kan oefenen? Bijvoorbeeld een loginsysteempje? Maar dat lijkt mij al meteen wat moeilijker.
Dank op voorhand!
Gewijzigd op 14/04/2011 17:19:59 door Ruben Portier
Een goed voorbeeld is een blog systeem. Alles wat een losstaand iets zou kunnen zijn, wordt dan een class.
Zonder die var krijg ik in DreamWeaver een fout. Dat kan niet volgens mij? Of bedoel je gewoon toch die $database1 weg doen?
Dit is wat ik nu heb:
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
25
26
27
28
29
30
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: cycle */
/* Returns all races and distances and adds new races to the database */
/* --------------------------------------------------------------------- */
class cycle
{
var $races_and_distances; // Holds the races and the distances in an array
function __construct()
{
// Connect to database
$this->database1 = new PDO('mysql:host=localhost;dbname=oop-scripts', 'root', 'Ati12ev');
$this->races_and_distances = $this->database1->query("SELECT race_name, distance FROM races");
}
// Returns all races and distances from the database into an array
function getRacesAndDistances()
{
return $this->races_and_distances->fetchAll(PDO::FETCH_ASSOC);
}
// Adds a new race to the database
function newRace()
{
}
}
?>
/* --------------------------------------------------------------------- */
/* CLASS: cycle */
/* Returns all races and distances and adds new races to the database */
/* --------------------------------------------------------------------- */
class cycle
{
var $races_and_distances; // Holds the races and the distances in an array
function __construct()
{
// Connect to database
$this->database1 = new PDO('mysql:host=localhost;dbname=oop-scripts', 'root', 'Ati12ev');
$this->races_and_distances = $this->database1->query("SELECT race_name, distance FROM races");
}
// Returns all races and distances from the database into an array
function getRacesAndDistances()
{
return $this->races_and_distances->fetchAll(PDO::FETCH_ASSOC);
}
// Adds a new race to the database
function newRace()
{
}
}
?>
Gewijzigd op 14/04/2011 17:39:47 door Ruben Portier
Als we bijv. naar een HTML tabel kijken. Dan hebben we 3 objecten: Cell, Row, Table. Deze 3 objecten hebben zijn allemaal een eigen class:
Cell
Row
Table
Al deze dingen hebben hun eigen eigenschappen. Een Cell heeft content in de cel. Een Row heeft cellen in 1 rij en een Table heeft weer rijen als eigenschap. Deze eigenschappen zijn properties (variabelen). Omdat we niet willen dat deze eigenschap zomaar worden gewijzigd zetten we deze properties op private.
Cell
- content
Row
- cells
Table
- rows
Nu gaan we nog een stapje verder. Want we kunnen die eigenschappen aanpassen. We kunnen content aan een cell toevoegen, of cellen aan een Row of rijen aan een Table. Deze aanpassingen heten methodes (functies). Deze functies moeten we gewoon kunnen aanroepen, dus noemen we ze public. We krijgen dan:
Cell
- content
+ setContent()
Row
- cells
+ setCells()
Table
- rows
+ setRows()
Ook kunnen deze dingen zichzelf opschrijven. Je kan een losse cell of een losse rij hebben. Dus zijn dat ook methodes:
Cell
- content
+ setContent()
+ getCell()
Row
- cells
+ setCells()
+ getRow()
Table
- rows
+ setRows()
+ getTable()
Dit is nu onze basis. Vanaf hier kunnen we de code gaan schrijven. Na het lezen van dit hoop ik dat je snapt hoe deze wedstrijden in OOP moet aanpakken. Misschien is het handig om deze stappen te volgen en jou resultaten in dit topic te zetten, zodat we je weer tips kunnen geven.
Van de rest nog wat andere punten:
- In plaats van var moet je protected, private of public gebruiken. Dit moet ook voor de functies. Als je uitleg hierover wilt moet je mijn uitleg hier eens bekijken.
- Je PDO connectie moet je uit de class halen, zo kan je hem vaker in projecten gebruiken. Je zet de PDO connectie dan in de var database en dan kan je die gebruiken. Je kan ook dwingen om alleen PDO te mogen invoeren:
Oke, heel erg bedankt!