Probleem output class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lead Java Developer

Dit ga je doen Je taken bestaan onder andere uit: Het aansturen van een development team bestaande uit 8 collega's op technisch maar ook HR gebied; Het maken van strategische keuzes omtrent de (nieuw)bouw van deze applicatie; Het maken van technische ontwerpen; Hands-on mee ontwikkelen met het team (met o.a. Java, Spring, Angular, REST); Reviewen van code en feedback geven op collega developers. Hier ga je werken Als Lead Software Developer ben je verantwoordelijk voor één van de vier Agile Java ontwikkelteams die bouwen aan technologie die duizenden instanties wereldwijd verbindt. Dit Agile team, data Jira en Confluence gebruikt en

Bekijk vacature »

C# .NET Developer

Dit ga je doen Als developer nieuwe gave features implementeren; Werken met technieken als C# .NET en (REST) API's webservices; Ontwikkelen van koppelingen middels API's; Maken van technische keuzes en beslissingen over de architectuur; Junior collega's coachen; Initiatief nemen voor nieuwe technische mogelijkheden; Je bent een belangrijke schakel - en vindt het leuk - om te schakelen met de business. Hier ga je werken In een klein team van professionals ben je als C# .NET Developer verantwoordelijk voor het ontwikkelen van één van de applicaties voor het grootste inhouse product: een applicatie voor alles omtrent hypotheken. De programmeertaal die je

Bekijk vacature »

Cymer Patch Server Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 12919 Introductie This new patch server will be built on Python and Django ReST and GraphQL services with a React frontend, it will consist of several microservices and run on a Kubernetes cluster. It will be supported by several middleware applications such as ElasticSearch, Redis, RabbitMQ, Oracle and Artifactory. Functieomschrijving The Patch Admin team always aim to deliver software at a high quality, we avoid sacrifices here to maintain our velocity. Practically this means that we practice test driven development and perform end-to-end automated testing on our software. This means

Bekijk vacature »

Front-end Developer

Dit ga je doen Het onderhouden, ontwikkelen en testen van front-end software van diverse klant- en medewerkersapplicaties; Het ontwikkelen van maatwerk front-end oplossingen in Vue.js en participeren in een scrumteam; Mede-verantwoordelijk voor het begeleiden en coachen van drie junior front-end developers; Verantwoordelijk voor code-reviews en het opstellen van de juiste documentatie zoals userstories en API ontwerp; Participeren in diverse projecten t.b.v. optimalisatie van diverse applicaties; Het opzetten van API koppelingen met externe applicaties. Hier ga je werken Betreffende organisatie is gevestigd in de regio van Swifterbant en is al ruim 20 jaar lang bedreven in het ontwikkelen en aanbieden van

Bekijk vacature »

Web Application Developer

Dit ga je doen Samen met het team werk je aan de visualisatie functionaliteiten en hoe dit gebruikt kan worden in een operationele setting; Het ontwerpen, ontwikkelen, onderhouden en leveren van support betreft het Warehouse Management Systeem en de bijbehorende web visualisaties; Je gebruikt hierbijde tools WebGL en ASP.net; Het meewerken in implementatieprojecten; Het leveren van Go-Live Support; Sparren met jouw Amerikaanse collega's. Hier ga je werken Voor een internationale organisatie in de transport zijn wij momenteel op zoek naar een Web Application Developer. Ze zijn wereldwijd de grootste speler en lopen voorop met het automatiseren van alle processen van

Bekijk vacature »

.NET Developer Azure

Dit ga je doen Het ontwerpen en bouwen van diverse applicaties (C#, ASP.NET, MVC); Het ontwikkelen van Webservices (WCF); Het meewerken aan de transitie naar Azure; Het samenwerken met collega's binnen een Scrumteam en meedenken over de User Stories; Het bouwen van unittesten; Meedenken over nieuwe tooling, ontwikkelingen en technologieën in de markt. Hier ga je werken Je komt te werken bij een organisatie die verantwoordelijk is voor de ontwikkeling van verschillende portalen. Deze portalen worden gebruikt door diverse partijen en jouw taak is om ervoor te zorgen dat deze optimaal functioneren. Je wordt onderdeel van een Scrumteam en werkt

Bekijk vacature »

Senior .NET developer

Functie Als Senior .NET ontwikkelaar ga jij aan de slag in ons Research & development team. Ons team bestaat uit 17 collega’s! Wij zijn momenteel druk bezig met het opzetten van een geheel nieuwe architectuur voor een nieuw product. Hierbij maken wij o.a. gebruik van VS2022 en .NET 6.0. Jouw functie is dan ook voornamelijk backend georiënteerd bij ons. Aangezien wij meetapparatuur ontwikkelen voor de chemische industrie is het ook erg belangrijk om kwalitatief hoogwaardige software te ontwikkelen voor de besturing hiervan. Verder ben jij verantwoordelijk voor het designen, implementeren en testen van nieuwe features. Ook zorg jij voor toekomstbestendige

Bekijk vacature »

.NET developer

Functie Als developer heb jij de keuze om aan te sluiten bij het team (13 developers) die op locatie projectmatig bij klanten werkt. Wanneer jij liever intern bij de werkgever werkt is er ook alle ruimte voor jou in het interne team (8 developers) van dit bedrijf. Je werkt samen aan verschillende projecten bij of voor de klant. Het project wordt aangeleverd door sales aan de project manager. Die maakt samen met de Resourcer een planning en op basis daarvan wordt uit het development team een “projectgroep” opgesteld. Hoeveel en welke projecten jij wilt oppakken gebeurt geheel in samenspraak met

Bekijk vacature »

APEX Ontwikkelaar in een team van Oracle Developer

Bedrijfsomschrijving Wij zijn op zoek naar een APEX Ontwikkelaar om onze opdrachtgever in Den Haag te versterken. In deze rol zul je verantwoordelijk zijn voor het ontwikkelen en onderhouden van de front-end van onze applicaties met behulp van Oracle Application Express (APEX). Je werkt aan zowel inhouse als externe projecten. De sfeer binnen het Oracle team is gemoedelijk en men probeert elkaar te helpen én van elkaar te leren. Zo ontstaat er een prettige en plezierige werksfeer waar ruimte is voor persoonlijke ontwikkeling en groei. Er wordt gewerkt met de meest nieuwe technologieën waardoor je kennis up-to-date blijft. Het bedrijf

Bekijk vacature »

Developer

Functie omschrijving In deze functie ga je werken als C# Developer. Jij gaat aan de slag met de volgende taken: Maatwerk software bouwen; Huidige softwareprojecten verder uitbouwen en optimaliseren; Ideeën van de klant omzetten naar handige oplossingen en tools; Bovenstaande doe je middels de Microsoft- stack: C#, ASP.NET en MVC/ Entity Framework. Ben je net afgestudeerd aan een HBO opleiding Informatica, aarzel dan niet om te solliciteren. Dit is namelijk de ideale startersfunctie! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van websites. Dit is door

Bekijk vacature »

Java Developer

Functie Wat ga je doen als Java developer? Jij komt terecht binnen een informeel team waarin je verantwoordelijk bent voor de backend systemen voor grote klanten als Ziggo en KPN. Als Medior Java developer werk je in teamverband en soms individueel. Gedurende de werkweek zal je veelvuldig sparren met je collega’s voor een goede implementatie van de software. Ben jij een echte Java developer? Ben je geïnteresseerd in de nieuwste technieken en de laatste ontwikkelingen? Dan ben je hier aan het juiste adres! Eisen Wat wordt er van jou verwacht? • Minimaal HBO/WO denk- en werkniveau; • Analytisch sterk, open

Bekijk vacature »

IoT Developer

Ben jij innovatief, heb jij passie voor energie en ben je data gedreven? Bouw dan mee aan IoT binnen Bredenoord. Samen met een gedreven team werk jij aan mooie technische en innovatieve oplossingen. Wat houdt de functie van IoT Developer in? Binnen Bredenoord zijn wij momenteel volop in ontwikkeling met ons IoT platform. Als uitbreiding van ons team zijn wij op zoek naar een IoT Developer. Je zal in projectverband meehelpen met het implementeren van IoT vraagstukken binnen Bredenoord. Als IoT Developer op onze R&D-afdeling word je verantwoordelijk voor het verder inrichten en beheren van ons nieuwe IoT platform. Dat

Bekijk vacature »

Front-end developer (Angular)

Functie Het team bestaat uit een architect, fullstack developers, app developers, de product owner en projectmanager. Eenieder draagt vanuit zijn discipline bij aan een complete oplossing voor de klant. Uiteraard zul je hierin nauw samenwerken met je collega’s. Jij wordt verantwoordelijk voor de front-end implementatie en fungeert als lead op dit gebied binnen het team. Je kunt helder formuleren, ideeën uitdragen en overbrengen aan je collega’s. Qua technische stack is het vooral van belang dat je ervaren bent met Angular, HTML5, CSS en TypeScript. Verder is ervaring in NgRx, Bootstrap, BEM en Cypress een pré, evenals affiniteit met UX/UI Design!

Bekijk vacature »

Account Developer

Voor Bol.com zijn wij per direct op zoek naar een Account Developer voor 32-40 uur per week op het kantoor in Utrecht. Wil jij een directe bijdrage leveren door partners van de juiste data-inzichten te voorzien en via campagnes op nieuwe platformkansen en features te wijzen? Ben jij analytisch sterk en kun jij dit vertalen naar plannen en inspirerende gesprekken? Lees dan snel verder! wat bieden wij jou Salaris van €2400 - €2600 obv 40 uur Minimaal 6 maanden Werklocatie is Utrecht Werken bij bol.com wie ben jij Jij bent commercieel gedreven en weet altijd aan de juiste knoppen te

Bekijk vacature »

.NET developer

Functie Jouw team van vier collega .NET developers is verantwoordelijk voor het bouwen van de ETL processen van jouw nieuwe werkgever. Op dit moment wordt de front-end gedaan door een extern team van professionals. Echter wilt jouw nieuwe werkgever graag intern deze kennis uitbreiden en heeft dan ook de ambitie om dit voor het eind van het jaar intern te gaan aanpakken. Dit betekend dat jij als .NET ontwikkelaar de ideale kans krijgt om jezelf samen met jouw collega’s te ontwikkelen als full stack developer. Als .NET ontwikkelaar werk jij bij deze gave werkgever met C# .NET, SQL, JavaScript, REST

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

16/02/2025 01:05:59
 
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.