return geeft gen waarde door binnen class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Cygio

cygio

28/03/2008 22:07:00
Quote Anchor link
Ik Ben een beetje aan het experimenteren met classes. Zo heb ik een toegangsclass voor mysql gemaakt die ik aanroep vanuit een andere classe,
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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];
     }
    
    
    }
    
    
  
  
  
  
  
  }

?>
 
PHP hulp

PHP hulp

17/11/2024 08:40:50
 
Jelmer -

Jelmer -

28/03/2008 23:15:00
Quote Anchor link
Hoe roep je hem aan? Zou je dat stukje code ook even kunnen posten?
 
Cygio

cygio

29/03/2008 07:58:00
Quote Anchor link
HoiHoi,

Als ik de functie samenstellen_datatabel aanroep doe ik dat als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
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.
 
Crispijn -

Crispijn -

29/03/2008 08:53:00
Quote Anchor link
Kan je niet beter op regel 57 van je class zo'n constructie maken?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$Rows
= ''

foreach($this->tabel as $fetch){
      $Rows[] = $fetch;
}


return $Rows;
?>
 
Jelmer -

Jelmer -

29/03/2008 11:20:00
Quote Anchor link
Het object waar je samenstellen_datatabel() op aanroept is een ander object dan waar je later datatabel_tellen() op aanroept. Je vervangt de Etalage in $obj immers door een nieuwe instantie van Etalage. En aangezien $this verwijst naar de instantie, en niet naar de definitie van de klasse (waar er maar 1 van kan zijn) zal je opzet niet werken.

Oplossing: $obj niet opnieuw vullen.
 
Cygio

cygio

29/03/2008 19:57:00
Quote Anchor link
@ crispijn
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.