Probleem output class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Developer

Functie Middels Scrum en sprints bouw jij in deze functie mee aan complexe webapplicaties en ons SaaS platform. Hierbij hoort ook architectuur tot een van je taken. Daarnaast ben je één van de leden van het Scrum team. Dat betekent dat je naast je kerntaken ook in contact staat met de product owner. Oftewel, je bent bij het gehele ontwikkelproces betrokken. Tools die hierbij gebruikt worden zijn o.a. PHP, Symfony en Git. Eisen • Minimaal HBO werk- en denkniveau • Minimaal 3 jaar aantoonbare ervaring met PHP • Kennis en ervaring Symfony (Laravel is pré) & Lando • Kennis van

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Airport Developer / System engineer

De functie Als onze nieuwe Airport Developer / System Engineer is je doel om uit nieuwbouw- en onderhoudsprojecten maximale waarde te creëren voor Schiphol Group en haar stakeholders. Vanuit je visie en expertise, maar ook (technologische) ontwikkelingen, wetgeving en beleid vertaal je klantwensen naar een gedegen programma van eisen. In de planontwikkelingsfase werk je nauw samen met Plan Ontwikkelaars om je kennis in te brengen ten behoeve van de kwaliteit van het investeringsvoorstel. Je overlegt met diverse partijen, stelt de vraag achter de vraag en verbindt zo de belangen van de luchthaven, proceseigenaar en asseteigenaar om tot een gedragen ontwikkelopgave

Bekijk vacature »

.NET developer

Functie Als junior .NET Developer start jij in een team met 15 developers. In het team is er genoeg senioriteit om ervoor te zorgen dat jij de juiste begeleiding krijgt. Jij begint als eerst alle software pakketten en processen eigen te maken. Vervolgens ga jij deze software programmeren, onderhouden en testen. Ook ga jij research doen naar nieuwe mogelijkheden en zoek jij uit hoe je dit kan implementeren. Jullie werken intern op project basis en afhankelijk van het project werken jullie wel of niet iedere ochtend met een standup. 50% van jullie werkzaamheden is maatwerk en de overige 50% is

Bekijk vacature »

Medior Java developer

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

C# Developer Research and Development - Delft

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Delft Vacature ID: 6307 Introductie C# Developer Research and Development - Delft - Onze klant is één van de meest innovatieve bedrijven in de region van Delft. Op dit moment zijn ze voor het innovatie centrum. In het innovatie centrum wordt gewerkt aan de nieuwste technieken voor navigatie software. R&D / C# / Pattern Recognition / Algorithms / 3d Data / DotNET Functieomschrijving Als C# Developer kom je te werken in een innovatief scrumteam. We ontwikkelen en door ontwikkelen de nieuwste technieken op het gebied van navigatie software. Deze software wordt onder andere

Bekijk vacature »

Gezocht: .Net ontwikkelaars met een maatschappelij

Bedrijfsomschrijving Zoek jij als medior .Net ontwikkelaar een inspirerende werkplek bij een bedrijf met maatschappelijk verantwoordelijkheidsgevoel? Dan is deze vacature je op het lijf geschreven. De organisatie bestaat ruim 20 jaar en ze ontwikkelen in house applicaties waarmee de zorgsector enorm mee gebaat is. Jouw applicaties worden gebruikt door duizenden gebruikers waardoor je echt een waardevolle bijdrage kan leveren aan de maatschappij. Het bedrijf is zeer innovatief en vindt een goede werk/privé balans belangrijk. Je krijgt alle mogelijkheden om jezelf verder te ontwikkelen, je werktijden in te delen en daarnaast is het ook mogelijk om deels thuis te werken. Het

Bekijk vacature »

Applicatieontwikkelaar Java EE

Bedrijfsomschrijving De IV- organisatie van de Belastingdienst is verantwoordelijk voor en verzorgt de ICT- voorzieningen. Het merendeel van de applicaties wordt op dit moment door de IV- organisatie zelf ontwikkeld, onderhouden en beheerd in het eigen data center. Naast de zorg voor continuïteit op de massale heffing- en inningsprocessen die plaatsvinden binnen een degelijke, stabiele omgeving, wordt er tevens volop gewerkt aan modernisering van het IV- landschap. Dit gebeurt deels intern door gebruik te maken van de expertise die intern aanwezig is, maar ook door het aantrekken van (kant-en-klaar) oplossingen en expertise uit de markt. Functieomschrijving De afdeling IV –

Bekijk vacature »

Front-end Developer

Front-end Developers opgelet! Bij Luminis zijn ze opzoek naar jou. Lees de vacature en solliciteer direct. Luminis is een software- en technologiebedrijf met meerdere vestigingen. Vanuit deze vestigingen werken 200 professionals aan technisch hoogwaardige oplossingen voor klanten zoals KLM, Nike en Bol.com. Ook ontwikkelt Luminis eigen oplossingen op het gebied van cloud, Internet of Things, data intelligence, e-sports en e-learning. Luminis onderscheidt zich door aantoonbaar voorop te lopen in technologie en innovatie. Luminis heeft drie kernpunten die verankerd zitten in alles wat we doen: het omarmen van nieuwe technologie, meesterschap en kennis delen. Functiebeschrijving First things first! Het is belangrijk

Bekijk vacature »

Medior/senior front end developer

Functie Vanwege de groei binnen het bedrijf zijn we op zoek naar versterking in het development team. Als back-end developer bouw je aan de bedrijfssoftware die ons helpt bij de primaire processen. Een leuk (intern) project dus waarbij je de software continu doorontwikkeld! Je werkt in een klein team, we hebben dagelijks stand-ups en iedere twee weken een scrum-sessie, begeleid door onze Scrum Master. Hierin krijg je uitgebreid de kans om je ideeën te presenteren, en te overleggen met je mede-ontwikkelaars en de Product Owner. Binnen de ontwikkelteams gebruiken we Trello, Gitlab, Jiira, Confluence en Boockstack. Hiernaast werken ze met

Bekijk vacature »

Medior Mobile Developer iOS Amsterdam

Functie What will you be doing as Mobile Developer? As an iOS app developer you will work in a multidisciplinary team of app developers, web developers and designers. You will work on world-class apps that will be used by thousands of people. There is a lot of room for self-development on a technical and personal level. Together with the rest of the team you develop in the newest techniques and you go for the best quality. We work with Kotlin Multiplatform Mobile to develop hybrid apps and we guarantee quality with peer reviews, unit testing and we use a CI/CD.

Bekijk vacature »

Traineeship IT regio Amsterdam/Utrecht

Wat ga je doen? Het traineeship begint met een fulltime maand cursussen en praktijkdagen, waarin je de basis van het IT-vak leert op de Shared Servicedesk (SSD). Daarnaast ga je meteen aan de slag voor je eerste certificering! (ITILv4). Je start in een groep met 4 tot 10 deelnemers, waarmee jij gedurende die maand optrekt en je kennis kunt delen. Na het voltooien van de eerste maand ga je direct voor een langere periode aan de slag bij één van onze klanten of blijf je intern bij ons op de Shared Servicedesk. Je bent het eerste aanspreekpunt van de eindgebruikers

Bekijk vacature »

Traineeship Java Developer

Functie Wat ga je doen als Java Developer? Jij start via ons bij deze opdrachtgever als Trainee Java ontwikkelaar, tijdens het traineeship ga je in 1 jaar van de basis naar professioneel Java ontwikkelaar. Je start samen met een groep trainees, volgt de aangeboden cursussen en gaat aan de slag bij één van onze opdrachtgevers. Na een aantal maanden volgt de volgende opdracht. Door de groei in jouw rol kom je op steeds complexere opdrachten terecht. Veel afwisseling dus. Collega’s met ervaring helpen je bij deze groei en samen met jouw coach ga je een persoonlijke leerplan opzetten om jou

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 »

Back-end Developer

Functie omschrijving Als Back-end Developer heb je de eer om als eerste interne developer bij deze organisatie te beginnen. Op dit moment zijn er externe developers, maar daar wil de organisatie verandering in brengen. Op termijn moet de gehele afdeling uit intern personeel bestaan. Je kan je voorstellen dat de eerste interne developer ook de nodige kennis mee moet brengen. Dat klopt. Je gaat je namelijk aan het begin bekommeren over de externe developers en uiteindelijk over je interne collega's. Verder ga je het volgende doen: Het bedenken, beheren en onderhouden van webportalen, API-koppelingen en applicaties; Je bedenkt en werkt

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

27/05/2026 09:43:23
 
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.