Hallo,
Ik ben nu bezig mijn site opnieuw op te bouwen, en ga daarvoor gebruik maken van OOP. Ik heb in mijn design plannen 6 classes staan die functies bevatten voor verschillende delen van de site.
Nu ik klaar ben met de tekeningen en programma structuur diagrammen, ben ik begonnen met het programmeren van de eerste paar testjes. Maar vrijwel direct liep ik tegen design problemen aan.
Ik heb in mijn voorbeeld 2 classes:
- scenes
- database
In de test staat deze code:
Dan heb ik in database.php
En in scene.php het volgende:
Sorry als het een beetje op een code-dump lijkt, maar ik heb het idee dat het allemaal al zo minimaal mogelijk is nu.
Anyway, dit werkt niet, en logisch ook.
Maar wat is nu de beste manier om in elke class en elke functie toegang te geven tot de verschillende classes?
Globals moet ik ontwijken heb ik gehoord. Maar ik snap die singletons niet helemaal. Ik heb het geprobeerd maar daar kwamen ook nog steeds errors van. En daarnaast moest ik het in iedere functie opnieuw doen? Ik wil gewoon een keer in de constructor alle classes binnen slepen, maar niet meerdere objecten van dezelfde class hebben.
Ik wil bijvoorbeeld niet dadelijk 7x een db object openen.
Kan iemand me uitleggen hoe ik hier alles op orde krijg?
Ik ben nu bezig mijn site opnieuw op te bouwen, en ga daarvoor gebruik maken van OOP. Ik heb in mijn design plannen 6 classes staan die functies bevatten voor verschillende delen van de site.
Nu ik klaar ben met de tekeningen en programma structuur diagrammen, ben ik begonnen met het programmeren van de eerste paar testjes. Maar vrijwel direct liep ik tegen design problemen aan.
Ik heb in mijn voorbeeld 2 classes:
- scenes
- database
In de test staat deze code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <?php include 'mysqli_extended.php'; include 'database.php'; include 'scene.php'; $odatabase = new database; $oscene= new scene; $db = new mysqli_extended; $list = $oscene->details(1); foreach ($list as $value) { echo $value."<br />"; } ?> |
Dan heb ik in database.php
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
| <?php class database { public function column_list($type) { if ($type == 'scene') { return " scene_id,scene_alive,scene_ip,scene_filename,scene_size, scene_title,scene_author,scene_description,scene_password, scene_datetime,scene_rating,scene_nr_downloads,scene_nr_views, scene_nr_comments,scene_nr_ratings,scene_response_to,scene_last_edit, scene_last_edit_by "; } } public function fetch_details($type,$id) { if ($type='scene') { $query = $db->prepare("SELECT ".$this->column_list('scene')." FROM box_scenes WHERE scene_id = ?"); $query->bind_param('i', $id); $query->execute(); $query->store_result(); $line = $query->fetch_assoc(); } $query->close(); echo "fetch flawless."; return $line; } } ?> |
En in scene.php het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <?php class scene { public function details($scene_id) { echo "start of function details() <br />"; $scene_array = $odatabase->fetch_details('scene',$scene_id); echo "database linked in function details() <br />"; if ($scene_array['scene_alive'] == true) { return $scene_array; } else { return false; } } } ?> |
Sorry als het een beetje op een code-dump lijkt, maar ik heb het idee dat het allemaal al zo minimaal mogelijk is nu.
Anyway, dit werkt niet, en logisch ook.
Maar wat is nu de beste manier om in elke class en elke functie toegang te geven tot de verschillende classes?
Globals moet ik ontwijken heb ik gehoord. Maar ik snap die singletons niet helemaal. Ik heb het geprobeerd maar daar kwamen ook nog steeds errors van. En daarnaast moest ik het in iedere functie opnieuw doen? Ik wil gewoon een keer in de constructor alle classes binnen slepen, maar niet meerdere objecten van dezelfde class hebben.
Ik wil bijvoorbeeld niet dadelijk 7x een db object openen.
Kan iemand me uitleggen hoe ik hier alles op orde krijg?
offtopic:
Ik weet niet zeker of dit taal-afhankelijk is, maar ik meen ooit eens gelezen te hebben dat PHP niet volledig OOP is.
Ik weet niet zeker of dit taal-afhankelijk is, maar ik meen ooit eens gelezen te hebben dat PHP niet volledig OOP is.
IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;