Probleem output class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java (Java EE) Developer

In het kort Werken als Java developer betekent werken aan complexe IT projecten bij onder meer een internationaal containeroverslag bedrijf. Zo sturen we apparaten en eindgebruikers aan d.m.v. onze custom-made software oplossing, die dagelijkse vele duizenden containers verwerkt. Denk aan systemen die volautomatische kranen aansturen en op afstand bedienen, de volledige afhandeling van containernummerherkenning bij het laden en lossen van zeeschepen of het tonen van instructies aan de chauffeurs van ruim 300 straddle carriers. En dat allemaal redundant, robuust en in een dynamische 24/7 omgeving! Jij versterkt ons ontwikkelteam en gaat aan de slag met oa. Java i.c.m. Spring (Boot),

Bekijk vacature »

C++ Developer

Functieomschrijving Ben jij als software engineer toe aan een nieuwe uitdaging? Dan zijn wij op zoek naar jou! Voor het maken van de procesbesturingsoftware gebruiken onze projectteams een in C++ en C# geschreven tool. Dit is een gedistribueerd object framework wat alle kernfuncties biedt voor een procesautomatisering. Verder zullen jouw werkzaamheden o.a. bestaan uit: Analyseren van vragen en wensen van gebruikers en deze vertalen naar een functioneel ontwerp; Ontwerpen, programmeren en testen van productaanpassingen; Implementeren van nieuwe productreleases in de projectteams; Continu toetsen van het effect van nieuwe releases op andere tools en processen; Inzichtelijk maken van voortgang omtrent softwarewerkzaamheden,

Bekijk vacature »

.Net ontwikkelaars voor de zorgsector

Bedrijfsomschrijving Voor onze klant in de omgeving van Zwolle zijn wij op zoek naar een ervaren .Net ontwikkelaar, bij voorkeur met ervaring binnen de belangrijkste sector van Nederland, namelijk: de zorgsector. Deze internationale organisatie ontwikkelt software voor de zorgsector. Er werken zo'n 25 medewerkers hard aan een oplossing die gebruikt wordt door heel Nederland. Er heerst een informele sfeer waarbij er altijd ruimte is voor een grapje. Je collega's zijn stuk voor stuk sterke ontwikkelaars vanuit verschillende achtergronden en met verschillende leeftijden. Je komt hier terecht in een organisatie die zich hard inzet om de zorgsector te verbeteren. De mogelijkheden

Bekijk vacature »

Back end developer

Functie Jij als full stack ontwikkelaar komt te werken in een team bestaande uit 4 back end programmeurs, 2 vormgevers/ Front end developers en een online marketeer. Qua persoonlijkheden is het team erg gevarieerd van sportfanaten tot gameliefhebbers en Golfers. Een ding heeft iedereen hier gemeen; Passie voor goede code. In jouw rol zul je voor 90% van je tijd je bezig houden met het ontwikkelen van grote maatwerk applicaties. Daarnaast hebben wij op aanvraag ook wel eens een website of onderhoudsklusje, die opgepakt moet worden en hier ben jij ook niet vies van. De technische uitdaging momenteel is dat

Bekijk vacature »

Delphi Programmeur

Functie omschrijving Onze opdrachtgever is gespecialiseerd in kantoor-bedrijfssoftware en zit gevestigd in omgeving Numansdorp. Als programmeur ben jij bij dit bedrijf met het volgende bezig; Je vertaalt technische en functionele ontwerpen naar kwalitatieve software. Je ontwikkelt, ontwerpt en test software. Je maakt daarbij veel gebruik met de volgende tools & technologieën: Delphi 10.3 (Rio), QuickReport 6. Je krijgt in deze rol veel vrijheid en verantwoordelijkheid. Je levert projecten van A - Z op, en werkt daarbij projectmatig en gestructureerd. Bedrijfsprofiel Dit bedrijf richt zich op maatwerk software oplossingen. Deze software oplossingen worden ingezet in de financiële branche. Het betreft een

Bekijk vacature »

Software Developer PHP

Functie omschrijving We are looking for a dutch native speaker Voor een opdrachtgever in de regio van Geldrop ben ik op zoek naar een Software Developer PHP. Jij krijgt een rol met veel verantwoordelijkheid in een groeiende organisatie. In deze functie werkt je voornamelijk remote en op een vast moment kom je met het team samen, om samen te werken en nieuwe doelen te bepalen. Wat ga je doen? Je wordt verantwoordelijk voor de interne applicatie; Je zorgt voor de doorontwikkeling van de applicatie: zowel back-end, front-end; De basis van het werk betreft front-end technieken; Periodiek bepaal je samen met

Bekijk vacature »

.Net Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

Bekijk vacature »

Junior .NET Software Developer

Dit ga je doen Software development met behulp van C# .NET en / of PHP, je mag zelf kiezen waar jij je in wil specialiseren Meedenken over het nieuwe pakket, waar moet het aan voldoen? Unit-, integratie- en diverse andere tests schrijven en uitvoeren Nauw samenwerken met je IT collega's zoals Testers, Developers, DevOps Specialisten en Architecten Jezelf ontwikkelen met behulp van trainingen en cursussen Hier ga je werken Onze klant, een grote speler in de medische sector, is op zoek naar een enthousiaste junior (of meer ervaren) Software Developer die klaar is voor een nieuwe stap in zijn of

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET developer start jij in een development team met twee ervaren software ontwikkelaars. Jouw persoonlijke ontwikkeling is voor ons erg belangrijk en jij gaat dan ook meelopen met onze Senior .NET ontwikkelaar die jou met zijn kennis en ervaring een goede begeleiding kan aanbieden. Als team zijn jullie verantwoordelijk voor het schrijven van software voor onze toonaangevende Automatiseringssystemen. Jij gaat aan de slag met de onderhoud van de kernsoftware, ondersteund de software van derden door het gebruik van onze webservices en als team zijn jullie verantwoordelijk voor het ontwikkelen van onze backend oplossingen. Wij maken op dit

Bekijk vacature »

Junior PHP Developer

Je maakt een vliegende start van je carrière, door meteen mee te bouwen aan de digitale aspecten van Coolblue. Wat doe je als Junior PHP Developer bij Coolblue? Als Junior PHP Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen om te groeien als Junior Developer. Op dat moment komt je wil om steeds te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te kunnen maken. Je sterk analytisch vermogen komt dan ook goed

Bekijk vacature »

Full stack .NET developer Microsoft 365

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

C#.NET Developer

Functieomschrijving We are looking for a dutch native speaker In deze uitdagende functie ga je werken als onderdeel van het development team, in de functie van C#.NET Developer, Je gaat maatwerk software bouwen voor diverse klanten. Ook optimaliseer je bestaande software en bouw je API koppelingen. Je bent vooral met back-end development bezig. Je krijgt veel vrijheid in deze functie en je krijgt de kans om mee te denken in bedrijfsprocessen. Deels thuiswerken is geen enkel probleem! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van

Bekijk vacature »

Low-Code Expert/Developer: Power Platform Speciali

Bedrijfsomschrijving Als Low-Code Expert/Developer bij ons innovatieve bedrijf, neem je een cruciale rol op je in de creatie, ondersteuning en implementatie van diverse oplossingen met behulp van het veelzijdige Power Platform. Dit platform omvat Power Apps, Power BI, Power Automate, Power Virtual Agent en Azure Logic Apps. Het Power Platform biedt je de mogelijkheid om klanten te voorzien van naadloze integraties door op maat gemaakte oplossingen te creëren die compatibel zijn met (bijna) alle bestaande software-infrastructuren. Dankzij het uitgebreide scala aan toepassingen, krijg je de kans om als architect en projectleider van je eigen oplossing te fungeren. Dompel jezelf onder

Bekijk vacature »

Senior Java developer

Als Senior Developer bij Sogeti ben je onderdeel van onze toonaangevende best-gecertificeerde Java community. Deze bestaat uit ruim 100 gepassioneerde professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze top-opdrachtgevers. Geen werkdag is hetzelfde! Je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfskritische systemen. Een voorbeeld hiervan is een cliënt-volgsysteem bij Reclassering Nederland. Andere klanten waar wij onder andere voor werken: KPN, Philips, Nationale-Nederlanden, Kamer van Koophandel, ABN AMRO, Bovemij, Aval en de Nationale Politie. Natuurlijk krijg jij de mogelijkheid je verder te certificeren in dit vakgebied. We

Bekijk vacature »

Software Developer .NET

Functie omschrijving .NET developer gezocht! Wij zoek op zoek naar een .NET Developer die zich niet uit het veld laat slaan voor een software bedrijf in de regio Veenendaal. Je gaat in deze functie aan de slag met het door ontwikkelen van bestaande producten en het ontwikkelen van nieuwe producten. Dit bedrijf ontwikkeld SaaS applicaties die zowel intern als extern gebruikt worden. Verder bestaat je functie uit: Het ontwikkelen en bouwen van webapplicatie, mobiele applicaties en websites vallen onder jouw verantwoordelijkheden; Werken met onder andere .NET, C#, HTML/CSS, Javascript en MSSQL/Oracle Databases; Hierin werk je samen met andere developers en

Bekijk vacature »
Marlies Maalderink

Marlies Maalderink

24/10/2016 14:01:48
Quote Anchor link
Hoi mensen,

Ik ben net begonnen met (lezen van) een boek over OOP en kom er nu al niet uit. Hopelijk kan iemand mij uitleggen wat ik verkeerd doe. Ik zeg er bij dat er geen opdrachten in het boek zitten, maar dat ik wel alle scripts uitschrijf en dan evt uitbreidt aan de hand van de stof om er zoveel mogelijk van op te pikken.

Het voorbeeld hieronder is trouwens een voorbeeld van hoe het niet moet maar dat staat los van mijn probleem. (volgende alinea gaat over inheritance en moet ik leren hoe het wel moet, haha)

Het boek laat een class zien met de naam ShopProduct. In deze class kun je zowel boeken als cd's aanmaken. Via de omslachtige functie getType moet je testen of je met een boek of cd te maken hebt. Deze functie wordt in het boek niet voorgedaan en heb ik dus zelf geschreven. De rest van de code komt letterlijk uit het boek, behalve dan dat aan getSummaryLine een extra regel (ik kan helemaal geen type vinden) heb toegevoegd om wat meer inzicht te krijgen in wat er nou mis gaat.)

De output van dit script is dus "ik kan helemaal geen type vinden". Dus ik vermoed dat er iets mis gaat in de functie getType. Echter, helemaal onderaan het script print ik bij wijze van test functie getType en dan krijg ik wel als output "book". Ik snap dus niet waarom functie getSummaryLine niet vaststelt dat het om een boek gaat.

Alvast mijn excuses als ik iets heel doms gedaan heb maar werk voor het eerst met classes dus moet nog heel veel leren...

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
<?php

class ShopProduct {
    public $numPages;
    public $playLength;
    public $title;
    public $producerMainName;
    public $producerFirstName;
    public $price;
    public $type;
    
    function
__construct ($title, $firstName, $mainName, $price, $numPages=0, $playLength=0 ) {
        $this->title                = $title;
        $this->producerFirstName    = $firstName;
        $this->producerMainName        = $mainName;
        $this->price                = $price;
        $this->numPages             = $numPages;
        $this->playLength            = $playLength;
    }
    
    function
getNumberOfPages() {
        return $this->numPages;
    }
    
    function
getPlayLength() {
        return $this->playLength;
    }
    
    function
getProducer() {
        return "{$this->producerFirstName}"."{$this->producerMainName}";
    }
    
    function
getType() {
        if ($this->numPages != 0){
            $this->type = "book";
        }
else {
            $this->type = "cd";
        }

    return $this->type;
    }
            
            
    function
getSummaryLine() {
        $base = "{$this->title} ( {$this->producerMainName}, ";
        $base .= "{$this->producerFirstName} )";
        if ($this->type == "book" ) {
            $base .= ": page count - {$this->numPages}";
        }
else if ( $this->type == "cd" ) {
            $base .= ": playing time - {$this->playLength}";
        }
else {
            $base .= "ik kan helemaal geen type vinden";
        }

        return $base;
    }
    
}


$product1 = new shopProduct("Boek over PHP", "Matt", "Zandstra", 5.99, 235, 0);
print $product1->getSummaryLine();
print $product1->getType();

?>


Toevoeging op 24/10/2016 14:06:35:

Als aanvulling, als ik $type gewoon in de contruct functie toevoeg werkt het wel maar het idee is juist dat het aan de hand van $numPages bepaald moet worden...
 
PHP hulp

PHP hulp

14/05/2024 11:44:11
 
Ben van Velzen

Ben van Velzen

24/10/2016 14:23:34
Quote Anchor link
Je zult eerst getType een keer moeten aanroepen om het type geset te krijgen, of getType gebruiken in je class ipv $this->type.
 
Ward van der Put
Moderator

Ward van der Put

24/10/2016 14:36:59
Quote Anchor link
Als iets uitsluitend een boek óf een cd is, kun je dat in deze klasse kennelijk met $numPages=0, $playLength=0 in de constructor regelen: een boek heeft immers pagina's maar geen speellengte en een cd heeft omgekeerd een speellengte maar geen pagina's. Geen fraaie oplossing (want je beter de klasse extenden voor een boek of een cd), maar deze hint in de constructor wijst wel die kant op.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

24/10/2016 14:43:03
Quote Anchor link
In aanvulling op Ben:

Je misbruikt nu de getType() method. Een (misschien ongeschreven) wet is dat je met een get...() functie (ook wel getter genoemd) informatie leest en met een set...() functie (of setter) iets schrijft.

Jouw code zou dus veel logischer zijn met deze twee methods:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function setType($type) {
    $this->type = $type;
}

function
getType() {
    return $this->type;
}

?>
Gewijzigd op 24/10/2016 14:44:42 door Frank Nietbelangrijk
 
Pg Vincent

Pg Vincent

24/10/2016 14:47:32
Quote Anchor link
Het idee van en "getType()" method is dat dat *de* manier is om uit te vinden wat het type is. Ook de "getSummaryLine" zou dus zelfs nog getType() moeten aanroepen.

De gedachte hierachter is simpel: als je op meerdere manieren het type kunt achterhalen, dan komen er gegarandeerd verschillen in en dan zegt de ene methode dat het en boek is terwijl de ander zegt dat het een cs is.

ps: zoals je het nu hebt is een product een cd zolang het geen pagina's heeft, heeft het wel pagina's dan is het ineens een boek. Los van de opmerking over overerven (waar ook weer een hele discussie bij komt kijken over hoe praktisch dat is) kun je denk ik beter een setType() maken waarin jij gewoon kunt aangeven wat voor product het is. Je stelt letterlijk de waarde van $this->type in op 'cd' of 'boek', dan verandert het type niet elke keer dat de inhoud van het product om welke reden dan ook stomtoevallig even voldoet aan de definitie van een cd of boek.
Daarnaast kun je in de methodes die b.v. het aantal pagina's instellen meteen naar het type kijken en een foutmelding geven als iemand probeert om het aantal pagina's in te stellen terwijl het om een cd gaat.
 
Marlies Maalderink

Marlies Maalderink

24/10/2016 16:14:05
Quote Anchor link
Bedankt voor alle reacties!

@Ben van Velzen, dat wist ik nog niet, en is wel nuttig om te weten!! Ik heb net in getSummaryLine GetType() eerst aangeroepen en dan werkt het script naar behoren. zoals PG Vincent ook zegt.

Rare vraag misschien (zoals ik al zei, ik ben nieuw met classes en heb ook alleen maar ervaring met hele basic functies) maar is het "netjes" om in een functie eerst een andere functie aan te roepen?

@Pg Vincent, wat je in je ps. zegt is helemaal waar, ik vermoed dat de rest van mijn hoofdstuk hier verder op in gaat. Maar één stapje tegelijk ;)

@Ward van der Put, dat klopt idd. Het boek legt zover steeds eerst allemaal "foutieve" methoden uit om dan te eindigen met de juiste, maar ik kreeg de foute methode niet aan het werk dus daar wilde ik me eerst toch even doorheen slaan. Leer ik weer van.
 
Ben van Velzen

Ben van Velzen

24/10/2016 19:25:58
Quote Anchor link
Quote:
Rare vraag misschien (zoals ik al zei, ik ben nieuw met classes en heb ook alleen maar ervaring met hele basic functies) maar is het "netjes" om in een functie eerst een andere functie aan te roepen?


Het is gebruikelijk, maar het is afhankelijk van wat je aan het doen bent. Hier heb je een getter functie gemaakt die side effects heeft. Dat is op zichzelf al uit den boze.
 
Marlies Maalderink

Marlies Maalderink

24/10/2016 20:30:30
Quote Anchor link
Ok, dank je. Het hele getter setter verhaal is me nog niet helemaal duidelijk maar zie dat ik daar nog ga komen over 20 bladzijden dus dat laat ik tot dan maar even voor wat het is.
 
Ozzie PHP

Ozzie PHP

24/10/2016 21:35:39
Quote Anchor link
>> Het hele getter setter verhaal is me nog niet helemaal duidelijk

In het kort ...

Met een setter stel je iets in (je 'set' een waarde).

Met een getter haal je een waarde op (je 'get' een waarde).

Setters: setAmount, setName, setTitle
Getters: getAmount, getName, getTitle

In de praktijk:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

$member_name
= 'Jan'; // dit haal je bijv. uit de database

$member = new Member();
$member->setName($member_name);

// ergens anders in je script

echo 'Welkom ' . $member->getName();

?>

>> maar is het "netjes" om in een functie eerst een andere functie aan te roepen?

Hangt er een beetje vanaf. Normaal staat een functie op zichzelf en voert deze één taak uit. Soms kan het zo zijn dat verschillende functies "een zelfde stukje taak" moeten uitvoeren. Voor "datzelfde stukje taak" kun je dan een aparte functie schrijven, die je vanuit die andere functies aanroept.

In fictieve code:

- maakwoonkamerschoon()
- maakzolderschoon()
- maakslaapkamersschoon()
- maakkeuken schoon()
- maakkelderschoon()

Met deze functies kun je delen van het huis schoonmaken.

Als je echter het hele huis wil schoon maken krijg je:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

maakhuisschoon() {
  maakwoonkamerschoon();
  maakzolderschoon();
  maakslaapkamersschoon();
  maakkeuken schoon();
  maakkelderschoon();
}


?>

Een stom voorbeeldje, maar het gaat even om de gedachtegang.
 
Pg Vincent

Pg Vincent

25/10/2016 09:36:04
Quote Anchor link
Quote:
Met een getter haal je een waarde op (je 'get' een waarde).


En wellicht handig om te weten / belangrijk om te benadrukken:

getters en setters zijn een conventie, een goede gewoonte. Je zou immers ook rechtstreeks de property kunnen aanspreken.
De reden voor getters en setters is dat je daarin code kunt plaatsen die de waarde bewerken en/of controleren en in kunnen grijpen als het mis gaat.

Stel dat je een email gaat versturen, dan wil je dat het ingestelde email adres ook echt een adres is, je wilt niet pas bij het versturen merken dat je "asdasd" als adres hebt gekregen, dus je setEmail() method controleert of de waarde die wordt "geset" wel een email adres is. Zoniet, dan laat je de setEmail() een fout produceren en dan weet het script dat probeert om het email adres in te stellen meteen dat het niet gaat werken. Zonder geset email adres kun je geen mail versturen, en zo blijft je een hoop ellende bespaard.

Op dezelfde manier zou een setPrice() nooit een negatief getal toestaan, en zou je met iets als getPrice("centen") de prijs terugkrijgen in centen in plaats van euro's; "145" in plaats van "1.45"
 
Marlies Maalderink

Marlies Maalderink

25/10/2016 10:50:53
Quote Anchor link
Bedankt voor de uitleg Ozzie en Pg Vincent. Ik ben gisteravond nog even aan het klungelen geweest met de code waarmee ik het topic opende maar kwam er niet helemaal uit.

Wat is een 'nette' manier om de waarde van $this->numPages in $this->type te krijgen?
Als ik de code van Frank Nietbelangerijk van hierboven neem:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function setType($type) {
    $this->type = $type;
}

function
getType() {
    return $this->type;
}

?>


maar hoe verwerk ik dit dan zo dat er uiteindelijk uitkomt of het om een boek of een cd gaat op basis van $this->numPages? Nog een nieuwe functie maken waarin ik $this->numPages ophaal en bekijk en vaststel of het een boek of een cd is? Want dan heb ik uiteindelijk 3 functies die hetzelfde doen als nu die ene functie...

En wat betreft functies, even uitgaande van de code waarmee ik het topic opende ook al is die niet zo netjes, is het dan het beste om getType aan te roepen in getSummaryLine, of om beide achter elkaar te gebruiken in de uiteindelijke uitvoerende code, of om nog een derde functie te maken die niets anders doet dan die twee functies te combineren? Of nog iets heel anders?

Nogmaals sorry als het domme vragen zijn maar ik wil het graag begrijpe :)
 
Ben van Velzen

Ben van Velzen

25/10/2016 11:06:31
Quote Anchor link
getType() aanroepen in je functie mag best, maar dan meer als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$type
= $this->getType();
?>


Wanneer je toch bepaalt op basis van $this->numPages heb je in principe dan $this->type niet nodig. Het voelt hooguit wat vreemd om op basis van het aantal pagina's het type te bepalen. Hoe classificeer je een dubbelcd bijvoorbeeld?
Je kunt uiteraard ook in de functie setNumPages bepalen wat het type wordt, en dan getType() binnen de class niet gebruiken. Het is maar net wat in de huidige situatie handiger is. Er is geen 1 formule die alles dekt.
 
Ward van der Put
Moderator

Ward van der Put

25/10/2016 11:15:15
Quote Anchor link
Marlies Maalderink op 25/10/2016 10:50:53:
Wat is een 'nette' manier om de waarde van $this->numPages in $this->type te krijgen?

Je had dit al in de getter staan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
    function getType() {
        if ($this->numPages != 0){
            $this->type = "book";
        }
else {
            $this->type = "cd";
        }

    return $this->type;
    }

?>

Hier staat de logica van je klasse: als iets pagina's heeft, is het een boek. Je zou die logica kunnen verplaatsen naar de constructor, aangezien je dáár (en alleen daar) het aantal pagina's instelt:
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
<?php
public function __construct($title, $firstName, $mainName, $price, $numPages = 0, $playLength = 0)
{

    $this->title             = $title;
    $this->producerFirstName = $firstName;
    $this->producerMainName  = $mainName;
    $this->price             = $price;
    $this->numPages          = $numPages;
    $this->playLength        = $playLength;

    if ($this->numPages != 0) {
        $this->type = 'book';
    }
else {
        $this->type = 'cd';
    }
}


public function getType()
{

    return $this->type;
}

?>

Met een aparte setter wordt hetzelfde:
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
<?php
public function __construct($title, $firstName, $mainName, $price, $numPages = 0, $playLength = 0)
{

    $this->title             = $title;
    $this->producerFirstName = $firstName;
    $this->producerMainName  = $mainName;
    $this->price             = $price;
    $this->numPages          = $numPages;
    $this->playLength        = $playLength;

    if ($this->numPages != 0) {
        $this->setType('book');
    }
else {
        $this->setType('cd');
    }
}


private function setType($type)
{

    $this->type = $type;
}


public function getType()
{

    return $this->type;
}

?>
 
Marlies Maalderink

Marlies Maalderink

25/10/2016 11:25:33
Quote Anchor link
Dank jullie, Ward, ik bedoelde inderdaad precies wat jij hier laat zien! Het is me nu duidelijk! (ik had niet door dat ik dat stukje code in de functie __construct kon/moest zetten)

Nogmaals, dat er allemaal haken en ogen aan kleven om op deze manier te bepalen of het om een boek of cd gaat (en wat dan als er ineens ook nog een dubbel cd zoals Ben van Velzen zegt bij zou komen ofzo) dat weet ik, ga nu verder met de paragraaf over hoe het dan wel moet. Maar door dit stukje besefte ik dat ik eea niet helemaal begreep en nu begrijp ik het wel. Dus ik kan weer verder, bedankt! :)
Gewijzigd op 25/10/2016 11:26:32 door Marlies Maalderink
 
Thomas van den Heuvel

Thomas van den Heuvel

25/10/2016 15:19:04
Quote Anchor link
In principe heb je bij de constructie van het object alle informatie om te bepalen van welk type deze is, dus hiervoor hoef je niet per se een aparte setter te maken. Het tweede codevoorbeeld van @Ward (de uitgebreide __construct) zou dus ook mijn voorkeur hebben.

Te meer om het volgende: objecten zijn (zouden?) meestal gebruiksklaar (moeten zijn?) na constructie. Dit houdt tevens in dat alle klasse-variabelen geïnitialiseerd zouden moeten zijn (een beginwaarde ontvangen zouden moeten hebben). Jouw probleem ontstond juist doordat $this->type nog geen waarde had op het moment dat je deze wilde gaan gebruiken in de methode getSummaryLine().

Het is altijd verstandig om elke (klasse-)variabele te voorzien van een (expliciete,) initiële waarde.
 
Ozzie PHP

Ozzie PHP

25/10/2016 16:40:34
Quote Anchor link
Even terug naar het begin ...

>> Het boek laat een class zien met de naam ShopProduct. In deze class kun je zowel boeken als cd's aanmaken.

Dat lijkt me al vreemd, dat je een algemene class gebruikt om een specifiek product aan te maken. Ward gaf dit eerder ook al aan zie ik.

Door dit soort rare voorbeelden zou je dus met één en dezelfde class een bankstel en een vliegtuig kunnen aanmaken (want een vliegtuig heeft 2 vleugels ... hmmm, juist ja). Als je het mij vraagt, leer je door dit soort voorbeelden niet goed programmeren.

In de realiteit zul je dus eerder gaan werken als volgt:

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

$book
= new Book();

$cd = new Cd();

$car = new Car();

?>

Het is heel raar om een object aan te maken, en vervolgens aan dat object te moeten vragen 'zeg ehhh ... wat ben jij eigenlijk voor een object?'.
Gewijzigd op 25/10/2016 16:42:22 door Ozzie PHP
 
Marlies Maalderink

Marlies Maalderink

25/10/2016 16:52:05
Quote Anchor link
Thomas van den Heuvel op 25/10/2016 15:19:04:
Te meer om het volgende: objecten zijn (zouden?) meestal gebruiksklaar (moeten zijn?) na constructie. Dit houdt tevens in dat alle klasse-variabelen geïnitialiseerd zouden moeten zijn (een beginwaarde ontvangen zouden moeten hebben). Jouw probleem ontstond juist doordat $this->type nog geen waarde had op het moment dat je deze wilde gaan gebruiken in de methode getSummaryLine().

Het is altijd verstandig om elke (klasse-)variabele te voorzien van een (expliciete,) initiële waarde.

Duidelijk verhaal! dank je :)



Toevoeging op 25/10/2016 16:59:00:

Ozzie PHP op 25/10/2016 16:40:34:
Even terug naar het begin ...

>> Het boek laat een class zien met de naam ShopProduct. In deze class kun je zowel boeken als cd's aanmaken.

Dat lijkt me al vreemd, dat je een algemene class gebruikt om een specifiek product aan te maken. Ward gaf dit eerder ook al aan zie ik.

Door dit soort rare voorbeelden zou je dus met één en dezelfde class een bankstel en een vliegtuig kunnen aanmaken (want een vliegtuig heeft 2 vleugels ... hmmm, juist ja). Als je het mij vraagt, leer je door dit soort voorbeelden niet goed programmeren.

In de realiteit zul je dus eerder gaan werken als volgt:

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

$book
= new Book();

$cd = new Cd();

$car = new Car();

?>

Het is heel raar om een object aan te maken, en vervolgens aan dat object te moeten vragen 'zeg ehhh ... wat ben jij eigenlijk voor een object?'.


Ozzie, je hebt helemaal gelijk.Zoals ik als aangaf, dit script is een voorbeeld van waarom het niet handig is om een class te maken die meerdere verschillende objecten denkt die allemaal verschillende eigenschappen hebben. (ben bezig met 'PHP Objects, Patterns, and Practice van Matt Zandstra') Volgende alinea houdt zich er mee bezig hoe dat beter kan. Maar omdat ik hier even vastliep omdat ik de $type er niet in kreeg wilde ik dat eerst even duidelijk hebben voor mezelf, voor ik in het volgende stuk duik. En hier nog vragen over had.
Het is jammer dat er geen opdrachten met uitleg bij het boek zitten, er wordt een stuk code gegeven en daar dan bij gezegd dat je de $type property kan instellen door $numPages te testen, maar nergens staat hoe. Dat probeerde ik dus voor elkaar te krijgen.
 
Ozzie PHP

Ozzie PHP

25/10/2016 17:06:16
Quote Anchor link
Geen probleem Marlies.

Ik gaf het alleen even aan omdat er genoeg boeken zijn die met dit soort foute voorbeelden strooien en het zou jammer zijn als jij vervolgens denkt 'dat het zo hoort' en het dus ook zo gaat doen.

>> ... kan instellen door $numPages te testen, maar nergens staat hoe.

Dat is iets waar je aan zult moeten wennen bij computerboeken. Vaak zijn die geschreven door programmeurs die niet altijd even goed in staat zijn om vanuit het perspectief van een beginner naar hun eigen code te kijken, laat staan met een kritische blik naar hun eigen code te kijken. Ik ben nog nooit een computerboek tegengekomen waar geen fouten in staan. Het probleem is dat je die fouten als beginner niet herkent en je dus geen idee hebt wat je fout doet. Als je wat meer gevorderd bent, herken je zulke fouten wel en kun je je alleen maar afvragen waarom de auteur iets heeft opgeschreven en klaarblijkelijk niet heeft getest.

Anyhow ... lang verhaal kort: verbaas je niet over fouten in computerboeken. En als je ergens niet uitkomt dan horen we het wel weer ;-)
 
Marlies Maalderink

Marlies Maalderink

25/10/2016 17:11:03
Quote Anchor link
Goed om te weten Ozzie! Als ik weer vastloop dan laat ik het weten, fijn dat jullie allemaal hebben geholpen en meegedacht :)
 



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.