Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

php hulp met functies en array's

Pagina: 1
Acties:

  • dezejongeman
  • Registratie: Juli 2006
  • Laatst online: 17-10 12:31
Ik zit met een probleem waar ik letterlijk meer dan 10 uur aan het aanklooien geweest. voor school moet ik een php schrijven maar ik kom er aan de hand van de voorbeelden niet uit en er zijn geen lessen meer dus vandaar dat ik de hulp elders moet zoeken.

het resultaat moet worden:

Dell Computer heeft code 1234AB en kost 499.95
USB-stick 256 heeft code 9999CD en kost 12.34
Genius Muis heeft code 8765ZZ en kost 9.99
de totaal prijs van de artikellen is 522.28 euro

tot zover heb ik:

Dell Computer heeft code 1234AB en kost 499.95
USB-stick 256 heeft code 9999CD en kost 12.34
Genius Muis heeft code 8765ZZ en kost 9.99

voor deze opdracht heb ik code gekregen vanuit waar ik moet starten en deze is alsvolgt:

PHP:
1
2
3
4
5
6
7
8
9
10
<?php
require_once("Artikel.php");
$a1 = new Artikel("1234AB", "Dell Computer", 499.95);
$a2 = new Artikel("9999CD", "USB-stick 256", 12.34);
$a3 = new Artikel("8765ZZ", "Genius Muis", 9.99);

$a1->printData();
$a2->printData();
$a3->printData();
?>


de opdracht luid schrijf een klasse artikel met functies printData() en function hoeveel_kost_dit(). printData() moet de de artikellen laten zien en function hoeveel_kost_dit() moet de totaal prijs uitrekenen en weergeven.

onderstaande heb ik tot zover
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    // de # verplaats ik als ik opdracht b of juist a wil gaan uitvoeren.
    
require_once("Artikel.php");
    #require_once("Opdracht5_1b.php");
    $a1 = new Artikel("1234AB", "Dell Computer", 499.95);
    $a2 = new Artikel("9999CD", "USB-stick 256", 12.34);
    $a3 = new Artikel("8765ZZ", "Genius Muis", 9.99);
    
    $artikellen[] = $a1;
    $artikellen[] = $a2;
    $artikellen[] = $a3;
    
    $a1->printData();
    $a2->printData();
    $a3->printData();
    
    $a1->hoeveel_kost_dit();
    $a2->hoeveel_kost_dit();
    $a3->hoeveel_kost_dit();
?>


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class artikel{
    private $name;
    private $code;
    private $price;
    
    public function __construct($cd, $nm, $prc){
    $this->name = $nm;
    $this->code = $cd;
    $this->price = $prc;
    }
    public function printData() {
        print $this->name." heeft code ".$this->code." en kost ". $this->price."<br/>";
    }
    
    public function hoeveel_kost_dit() {
    $prijs =  $this->price + $this->price;
    print $prijs;
    }
]}
//Van ieder artikel wordt vastgelegd de name, de code en de price
?>


zoals jullie misschien zien wordt de functie hoeveel_kost_het() 3 keer aangeroepen omdat er ook 3 artikellen zijn. maar bij iedere nieuwe aanroep wordt de oude gegevens overschreven door de nieuwe. hierdoor kan ik niet de totaal prijs uitrekenen omdat de oude prijs gegevens niet meer bestaan.

ik heb echt vanalles geprobeerd om dit voorelkaar te krijgen door de gegevens met substr en strpos los in een array of aparte variable te stoppen maar niets werkt.

[ Voor 3% gewijzigd door dezejongeman op 23-10-2013 09:44 ]


  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 19:09
Je hebt 3 losse instances van de Artikel class, je kan niet zomaar even $this->price optellen van een andere instance.
Wat je wel zou kunnen doen, is niet de prijs printen, maar returnen (gewoon return $this->price)
Dan heb je gewoon buiten je class een variable $totaalprijs die begint op 0, en dan $totaalprijs += $artikel->hoeveel_kost_dit();

En kijk ook even naar foreach, want nu zet je het in een array maar doet er niks mee..
(En code kan tussen [ php] tags om het leesbaar te maken)

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:33
Ze worden niet overschreven. Op regel 6-8 maak je 3x een artikel aan. Dat artikel is een los ding (leg 3 artikelen voor je op tafel). Die 3 noem je instanties van Artikel. Een instantie is staat in je voorbeeld dus voor een los artikel met een eigen naam/prijs/etc.

Het idee lijkt te zijn:

Je maakt een array (php.net/array) met daarin alle artikelen. Dat zie je op regel 10-12. Hoe moet je je dat voorstellen:

array(Artikel 1, Artikel 2, Artikel 3)

Ofwel een lijstje.

Ik zie dat je in Class Artikel (let op de hoofdletter!) een functie hoeveel_kost_dit hebt gemaakt. Wat dit waarschijnlijk moet doen is: return $this->price; Je vraagt aan het Artikel->hoeveel_kost_dit() en je krijgt als antwoord de prijs.

Om nu naar je totaal toe te gaan:

Je hebt het lijstje in je eerste PHP bestand:

array(Artikel 1, Artikel 2, Artikel 3)

Daar kan je doorheen lopen met foreach (php.net/foreach). For each kan door een lijstje heen lopen, het ziet er ongeveer zo uit:

PHP:
1
2
3
foreach($artikelen AS $artikel) {
  echo $artikel->hoeveel_kost_dit();
}


Nu laat ik de waarden zien, je kan ze uiteraard ook optellen (even googlen daarvoor en puzzelen).

PS. Wat verschrikkelijk trouwens dat dit in het Nederlands moet, zo verwarrend. Had even een voorbeeldje gemaakt, leest in het Engels stukken eenvoudiger voor mijn gevoel.

[ Voor 6% gewijzigd door djluc op 23-10-2013 10:11 ]


  • epic007
  • Registratie: Februari 2004
  • Laatst online: 17-11 15:31
PHP:
1
2
3
4
5
public function hoeveel_kost_dit()
{ 
    $prijs =  $this->price + $this->price; 
    print $prijs; 
}

Dit klopt niet echt.. volgens mij print je hier alleen 2x de prijs van je artikel.

Voor de totaalprijs heb je volgens mij een functie nodig als:
PHP:
1
2
3
4
5
6
7
8
function bereken_totaal ($artikelen)
{
    foreach(...)
    {
      ...
    }
    return ...
}

[ Voor 3% gewijzigd door epic007 op 23-10-2013 13:49 ]


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:33
epic007 schreef op woensdag 23 oktober 2013 @ 13:47:
PHP:
1
...

Dit klopt niet echt.. volgens mij print je hier alleen 2x de prijs van je artikel.

Voor de totaalprijs heb je volgens mij een functie nodig als:
PHP:
1
...
Ja maar die hoort niet in zijn Artikel class thuis maar in een collection.

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 13-11 23:00
Eigenlijk kunnen we dus concluderen dat de opdracht fout is?
hoeveel_kost_dit() moet de totaal prijs uitrekenen en weergeven
Mnee, hoeveel_kost_dit() moet de prijs van het artikel retourneren en met een loopje in je 'hoofdprogramma' moet je de totaalprijs uitrekenen en weergeven.

Als alternatief zou je het huidige subtotaal mee kunnen geven aan hoeveel_kost_dit, maar dat wordt weel heeel erg contra-intuïtief.

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:33
Het is niet de meest mooie opdracht nee. Niet bepaald het "goede voorbeeld" maar als introductie kan het nog wel volstaan natuurlijk.

@TS: is het gelukt? Heb je een werkende variant? Heb wat voorbeeldjes voor je als je zelf de opdracht opgelost hebt.
Pagina: 1