Hey Tweakers
,
Ik ben als hobbyist webdesigner begonnen me te oriënteren op het schrijven van PHP code op de OOP manier, zoals het in mijn ogen hoort en het meest overzichtelijk is.
Nu is OOP in elke programmeertaal wel iets anders geimplementeerd, zodat je kennis over het principe wel mee kunt nemen, maar de implementatie elke keer weer moet leren.
Ook twijfel ik bij dit probleem een beetje aan mezelf, omdat het al een hele poos geleden is dat ik fatsoenlijke code heb geproduceerd. Ben bang dat ik het wat verleerd ben
.
Probleem
Bij het aanroepen van een functie uit een class vanuit een php document waarin ik die class geinstantieerd heb geeft PHP op 1 manier wel een Fatal Error en op de andere manier niet. Ik weet niet genoeg om het verschil te ontdekken.
Code
Ik heb een heel simpel voorbeeld gemaakt zodat een van jullie hopelijk gelijk kan zien wat hier mis is.
Dit is de class:
En dit is het php document dat het object instantieert en de functie aanroept:
Foutmelding
Bovenstaande code geeft de volgende foutmelding:
Het is wel zo dat dit wel goed gaat wanneer ik de regel:
Gewoon in het PHP stuk in de body zet, dus zo:
Oplossing?
Het is me wel duidelijk dat er iets mis gaat met het aanmaken van het $testclass object, maar ik zou niet weten hoe. Ik wil in principe in het begin van mijn document een class object aanmaken, eventueel met een aantal handelingen in de constructor, en dan later vanuit een php block in de body van mijn document een aantal functies in dat document kunnen aanroepen, die op hun beurt weer data uit functies van mijn class halen.
Lijkt me een normale werkwijze, maar goed. Ik hoor graag wat ik hier verkeerd doe
.
Ik ben als hobbyist webdesigner begonnen me te oriënteren op het schrijven van PHP code op de OOP manier, zoals het in mijn ogen hoort en het meest overzichtelijk is.
Nu is OOP in elke programmeertaal wel iets anders geimplementeerd, zodat je kennis over het principe wel mee kunt nemen, maar de implementatie elke keer weer moet leren.
Ook twijfel ik bij dit probleem een beetje aan mezelf, omdat het al een hele poos geleden is dat ik fatsoenlijke code heb geproduceerd. Ben bang dat ik het wat verleerd ben
Probleem
Bij het aanroepen van een functie uit een class vanuit een php document waarin ik die class geinstantieerd heb geeft PHP op 1 manier wel een Fatal Error en op de andere manier niet. Ik weet niet genoeg om het verschil te ontdekken.
Code
Ik heb een heel simpel voorbeeld gemaakt zodat een van jullie hopelijk gelijk kan zien wat hier mis is.
Dit is de class:
PHP: testClass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| <?php class testClass { function testClass() { //constructor } function doCount (){ $countArray = array(); for($i = 0; $i < 10; $i++){ array_push($countArray,$i); } return $countArray; } } ?> |
En dit is het php document dat het object instantieert en de functie aanroept:
PHP: testfile
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
| <?php require_once("classes/testClass.php"); $testclass = new testClass(); $someArray = array(); function countToTen(){ $someArray = $testclass -> doCount(); } ?> <!DOCTYPE html> <html lang="nl"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Testfile</title> </head> <body> <?php countToTen(); if(!empty($someArray)){ var_dump($someArray); } else { echo 'Array is empty'; } ?> </body> </html> |
Foutmelding
Bovenstaande code geeft de volgende foutmelding:
Ik begrijp dat het dus iets te maken heeft met het aanroepen van een functie (doCount) op een object wat op dat moment niet bestaat ($testclass). Echter, aan het begin van dat document heb ik dat object toch aangemaakt? De volgorde van aanroepen is IMO ook gewoon goed...Fatal error: Call to a member function doCount() on a non-object in /..filepath../testfile.php on line 9
Het is wel zo dat dit wel goed gaat wanneer ik de regel:
PHP:
1
| $someArray = $testclass -> doCount(); |
Gewoon in het PHP stuk in de body zet, dus zo:
PHP:
1
2
3
4
5
6
7
8
9
10
| <body> <?php $someArray = $testclass -> doCount(); if(!empty($someArray)){ var_dump($someArray); } else { echo 'Array is empty'; } ?> </body> |
Oplossing?
Het is me wel duidelijk dat er iets mis gaat met het aanmaken van het $testclass object, maar ik zou niet weten hoe. Ik wil in principe in het begin van mijn document een class object aanmaken, eventueel met een aantal handelingen in de constructor, en dan later vanuit een php block in de body van mijn document een aantal functies in dat document kunnen aanroepen, die op hun beurt weer data uit functies van mijn class halen.
Lijkt me een normale werkwijze, maar goed. Ik hoor graag wat ik hier verkeerd doe