return geeft gen waarde door binnen class
tot zover geen probleem de database gegevens worden correct verwerkt.
Maar nu in de class waar ik de gegevens wil bewerken doet zich iets opmerkelijks voor. in de eerste functie haal ik de gegevens op en zet deze in een array, deze wil ik beschikbaar stellen met return zodat ik hem weer kan gebruiken in een andere functie, ook dit werkt.
Maar nu wil ik deze array weer gebruiken in een andere functie, hier gaat het fout. vanaf hier geeft die niets meer door. heb al van alles geprobeerd, maar kom er niet uit.
misschien dat iemand mij hier een antwoord op kan geven, ik heb in de code commentaar toegevoegd. Wat doe ik fout en waarom is dat fout .
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
class etalage{
var $items=array() ;
var $tabel=array() ;
//constructor
function etalage() {
include ("toegang.inc.php") ;
$this->database_uitlezen();
}
function database_uitlezen() {
// haalt gegevns op uit database en stelt array samen
$db=new toegang() ;
$db->sql_opdracht("select artikelnaam,artikelnr,prijs FROM producten") ;
while ($data=$db->sql_gegevens()) {
array_push($this->items,array("artikelnaam" => $data['artikelnaam'],"artikelnr" => $data['artikelnr'],"prijs" => $data['prijs'])) ;
}
return $this->items;
}
function samenstellen_datatabel() {
// stelt de data tabel samen en zet deze in array
$i=0;
while ($i< count($this->items)) {
array_push($this->tabel,
"<table border='1'cellspacing='0'cellpadding='0'>
<tr><td>" .$this->items[$i]['artikelnaam'] . "</td></tr>
<tr><td>" .$this->items[$i]['artikelnr'] . "</td></tr>
<tr><td>" .$this->items[$i] ['prijs'] . "</td></tr>
</table>" ) ;
$i++;
}
//als ik hem hier echo dan geeft die netjes de tabel met gegevens
//dus $this->items wordt wel goed door gegeven met return
for($i=0;$i<count($this->tabel);$i++) {
echo $this->tabel[$i];
}
return $this->tabel;
}
function datatabel_tellen() {
for($i=0;$i<count($this->tabel);$i++) {
//als ik hem hier echo dan geeft die niets !!!!!!!!!!!!!
echo $this->tabel[$i];
}
}
}
?>
class etalage{
var $items=array() ;
var $tabel=array() ;
//constructor
function etalage() {
include ("toegang.inc.php") ;
$this->database_uitlezen();
}
function database_uitlezen() {
// haalt gegevns op uit database en stelt array samen
$db=new toegang() ;
$db->sql_opdracht("select artikelnaam,artikelnr,prijs FROM producten") ;
while ($data=$db->sql_gegevens()) {
array_push($this->items,array("artikelnaam" => $data['artikelnaam'],"artikelnr" => $data['artikelnr'],"prijs" => $data['prijs'])) ;
}
return $this->items;
}
function samenstellen_datatabel() {
// stelt de data tabel samen en zet deze in array
$i=0;
while ($i< count($this->items)) {
array_push($this->tabel,
"<table border='1'cellspacing='0'cellpadding='0'>
<tr><td>" .$this->items[$i]['artikelnaam'] . "</td></tr>
<tr><td>" .$this->items[$i]['artikelnr'] . "</td></tr>
<tr><td>" .$this->items[$i] ['prijs'] . "</td></tr>
</table>" ) ;
$i++;
}
//als ik hem hier echo dan geeft die netjes de tabel met gegevens
//dus $this->items wordt wel goed door gegeven met return
for($i=0;$i<count($this->tabel);$i++) {
echo $this->tabel[$i];
}
return $this->tabel;
}
function datatabel_tellen() {
for($i=0;$i<count($this->tabel);$i++) {
//als ik hem hier echo dan geeft die niets !!!!!!!!!!!!!
echo $this->tabel[$i];
}
}
}
?>
Hoe roep je hem aan? Zou je dat stukje code ook even kunnen posten?
Als ik de functie samenstellen_datatabel aanroep doe ik dat als volgt:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
include ("etalage.inc.php") ;
$obj=new etalage() ;
$obj->samenstellen_datatabel();
?>
include ("etalage.inc.php") ;
$obj=new etalage() ;
$obj->samenstellen_datatabel();
?>
zoals in de code aangegeven werkt dit wel, nu wil ik een stapje verder en wil de samengestelde array in de volgende functie wil gebruiken .
deze aanroep doe ik als volgt:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
include ("etalage.inc.php") ;
$obj=new etalage() ;
$obj->datatabel_tellen();
?>
include ("etalage.inc.php") ;
$obj=new etalage() ;
$obj->datatabel_tellen();
?>
Deze echo doet helemaal niets, terwijl de code nagenoeg hetzelfde is. ook een foutmelding blijft onthouden, dus die kan ik helaas ook niet geven.
Oplossing: $obj niet opnieuw vullen.
Is dat beter dan, ben nog een leek en ben al blij dat het doet wat ik wil (behalve de reden van deze post,lol).
@jelmer
maar ik wil samenstellen_datatabel niet direct aanroepen, maar een andere functie,deze echo was enkel als test.
Maar wil wel de array van samenstellen_tabel gebruiken.
even mijn beredenatie:
In de constructor roep ik de functie $this->database_uitlezen() aan deze geeft $items met return door, deze $items gebruik ik in samenstellen_datatabel, deze bewerking kan ik dan toch ook gewoon doorgeven met return om er later weer wat mee te doen enz.
maar ik begrijp uit jou verhaal dat het niet mogelijk is, misschien een blooper eerste klas van mijn kant.
maar dan moet ik een ander object maken, heb je misschien een code voorbeeldje voor me , dan wordt het meestal wat duidelijker.
Mocht je daar zin en tijd voor hebben, dan ben je vast vriendelijk bedankt.
edit****
@jelmer
bedoelde je zo iets :
deze opzet werkt wel
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$obj=new etalage() ;
$tabel=$obj->samenstellen_datatabel();
$obj->datatabel_tellen($tabel);
?>
$obj=new etalage() ;
$tabel=$obj->samenstellen_datatabel();
$obj->datatabel_tellen($tabel);
?>
verdient misschien niet de schoonheidsprijs, maar in het kader van het leerproces ben ik weer een stuk op geschoten.
jij nog commentaar??????
Gewijzigd op 01/01/1970 01:00:00 door cygio