Probleem output class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

In-house .NET software developer

Functie omschrijving Ben jij op zoek naar een uitdagende in-house development functie? Maak jij graag hét verschil m.b.t. interne automatisering? Haal jij energie uit het automatiseren van processen voor je eigen collega's? Dan hebben wij de perfecte vacature voor je! Voor een gezellig Brabants familiebedrijf, zijn wij op zoek naar een .NET software developer. Je gaat in deze zelfstandige functie werken aan de ontwikkeling van eigen applicaties & en het koppelen van deze applicaties aan de ingekocht software. Jouw werkzaamheden zien er als volgt uit: Het management team signaleert behoeftes vanuit de business. Vervolgens worden deze behoeftes uitgewerkt en geprioriteerd.

Bekijk vacature »

.NET developer

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 »

SQL Developer

Functie omschrijving Altijd al willen werken bij een snelgroeiend bedrijf, actief in de logistieke sector? Dit is je kans! Ik ben op zoek naar een ervaren SQL Developer in de omgeving Tilburg. Dit bedrijf is gespecialiseerd in in de ontwikkeling van software en maatwerk oplossingen voor het automatiseren van logistieke processen. Klanten zijn o.a. BOL en andere grote distributiecentrums. Jouw taken worden vooral: Verantwoordelijk voor ontwikkelen van stored procedures, voor snelle afhandeling van data; Optimalisatie van de SQL query's en T-SQL query's; Jij gaat je bezig houden met ontwerpen, ontwikkelen en optimaliseren van de MS SQL Databases; In deze functie

Bekijk vacature »

Frontend Developer

Dit ga je doen Door ontwikkelen van het online platform Deel uitmaken van verschillende ontwikkelteams Meedenken over UI/UX vraagstukken Uitdragen van Front-end binnen de organisatie Hier ga je werken Deze organisatie, gevestigd in de omgeving van Amsterdam, is een grote onderwijs instelling met meerdere vestigingen en een groot aantal studenten. Zo telt deze organisatie +/- 35.000 gebruikers. Bij deze organisatie staat jouw ontwikkeling centraal en is er veel ruimte voor eigen initiatieven. In samenwerking met jouw team ga jij de online omgeving verder ontwikkelen. In de rol van Front end Developer zal jij 50% van jouw tijd werken in het

Bekijk vacature »

PHP Developer (junior functie)

Functie omschrijving Ben jij een starter en wil je werken bij een jong en leuk bedrijf? Lees dan verder! Wij zijn op zoek naar een PHP Developer binnen een junior functie. Binnen dit bedrijf gaat het om persoonlijke aandacht en ontwikkeling! Je komt te werken voor een leuk communicatiebureau die alles op het gebied van online en offline communicatie doet. Dit doen zij voor verschillende branches, waardoor je aan diverse soorten projecten mag werken, dit maakt deze baan erg leuk! Daarbij werk je aan een door hun zelf ontwikkeld framework welke goed leesbaar is. Je maakt voor bedrijven op maat

Bekijk vacature »

.NET software developer

Functie omschrijving Voor een gewilde werkgever in omgeving Roosendaal zijn wij op zoek naar een back-end software developer met een aantal jaar werkervaring. Je krijgt een plekje in het workflow team en je zal betrokken worden bij het bouwen van nieuwe software, en het optimaliseren van bestaande code. Je werkt bij dit bedrijf in een Scrum team waarin je soms klantcontact hebt. Jouw werkzaamheden zullen er als volgt uit zien: Je krijgt een plekje op de in-house IT afdeling. Deze afdeling bestaat uit zo'n 12 collega's, verdeeld over verschillende specialisaties (BI, Beheer, Business software & workflow). De vacature staat open

Bekijk vacature »

Ervaren PHP ontwikkelaar

Functie Jij als PHP ontwikkelaar komt te werken in een team van 4 andere PHP ontwikkelaars. Je zult je voornamelijk bezig houden met: – Het ontwikkelen van nieuwe features – Doorontwikkelen van de API – Nadenken over de technische infrastructuur – Datakwaliteit Samen met het team ben jij verantwoordelijk voor de verdere ontwikkeling van de software en om de positie als marktleider in Europa te behouden. Ze werken volgens SCRUM in 2 wekelijkse sprints, werken met Jira voor alle tickets en communiceren veel via Slack. Eisen • Minimaal 3 jaar ervaring als back end developer • Je hebt affiniteit met

Bekijk vacature »

Medior PHP Developer

Functie omschrijving Ben jij een getalenteerde PHP Developer en aan de slag in een gemotiveerd team? Lees dan snel verder! Voor onze opdrachtgever in de omgeving van Valkenswaard zijn we op zoek naar een ervaren PHP developer. Jij gaat hier zorg dragen voor het optimaliseren en up-to-date houden van de bestaande applicaties. Je werkt verder aan de applicaties die jij verder ontwikkelt. Dit doe je voornamelijk met PHP en MySQL. Verder ga je je bezig houden met: Het uitbouwen van het E-commerce software platform. Deelnemen aan overleggen met het team. Het ondersteunen van jouw team developers (3 man) en helpen

Bekijk vacature »

Back-end Developer Java

Dit ga je doen Het (door)ontwikkelen van een zelfgebouwde applicatie in Java, Spring Framework, SQL, HTML, CSS en Javascript; End-to-end beheer m.b.t. de applicatie en koppelen van applicaties binnen het landschap; Ontwikkelen van rapportages voor de interne organisatie; Ontwikkelen van aanvullende functionaliteiten m.b.t. de applicatie; Uitvoeren van testen en code reviews. Hier ga je werken Binnen deze organisatie kom je te werken op de afdeling die medische gegevens verzamelt vanuit het hele land. Denk hierbij aan vertrouwelijke persoonsgegevens. Het team verwerkt al deze data met als doel het waarborgen en verbeteren van de kwaliteit van de zorg in heel Nederland.

Bekijk vacature »

Integratie Developer / Architect

Dit ga je doen Als Integratie Developer / Architect binnen deze organisatie krijg je echt de kans om impact te maken. De organisatie is groeiende maar houdt een corporate cultuur buiten de deur. Heb je een goede business case: zorg voor goede argumentatie en ga ervoor! Geen stroperig beslissingsproces dat jouw ideeën in de weg staat! Enkele van jouw taken: Je ontwerpt en ontwikkelt nieuwe integraties met behulp van interne tools (Boomi) of externe partners; Je vertaalt functionele specificaties naar technische oplossingen; Je denkt mee over strategische ontwikkelingen op het gebied van applicatie integratie; Je voert regie op leveranciers en

Bekijk vacature »

PHP back-end developer gezocht!

Functie Werk je liever zonder druk en keiharde deadlines maar met de focus op kwaliteit? Dan kom je hier op de juiste plek terecht! In Het team bestaat momenteel uit 12 developers, hiernaast werken er collega’s van front-end, UX maar ook marketing/sales en support. In iedere sprint ontwikkel je samen functionaliteiten met als uitdaging om de klanten de beste gebruikerservaring te bieden. Ze bieden een werkplek waar je jezelf kunt blijven ontwikkelen, en mee te werken aan zowel bestaande als nieuwe mogelijkheden. Eisen • HBO werk- en denkniveau (ze kijken niet naar een papiertje) • Je denkt graag mee over

Bekijk vacature »

Senior Organisatieontwikkelaar

Als Organisatieontwikkelaar zorg je ervoor dat we in het magazijn van Coolblue altijd vooruit voetballen op het gebied Medewerker en Organisatie Ontwikkeling. Zo draag je bij aan een toekomstbestendig magazijn waar we klanten én medewerkers elke dag blijven verwonderen. Wat doe je als Senior Organisatieontwikkelaar bij Coolblue? Als Organisatieontwikkelaar werk je voor het magazijn van Coolblue. Je krijgt er energie van om continue te bouwen aan een toekomstbestendige organisatie. Dat doe je samen met 17 collega's in het HR-team, ieder met een eigen specialisme. Je werkt graag zelfstandig en je weet snel je weg te vinden als verandermanager. Ook ben

Bekijk vacature »

C# .NET Developer

Dit ga je doen Ontwikkelen van de Back-end in .NET6 / C# en WebAPI (Focus);) Ontwikkelen van de Front-End in Nodje.js en Angular (secundair); Ontwikkelen in Blazor; Opstellen van een technisch ontwerp; Testen, documenteren en implementeren van de nieuwe applicatie; Verzorgen van de nazorg, na de implementatie. Hier ga je werken Binnen deze organisatie werken duizenden mensen binnen allerlei verschillende disciplines. Tevens hebben zij veel specialiteiten in huis, waaronder ook .Net Developers. Ter uitbreiding van een nieuw team en ter ondersteuning van het project zijn ze opzoek naar een nieuwe collega voor het team. Als C#.NET Developer zal jij je

Bekijk vacature »

Software Programmeur

Functie omschrijving Voor een informele club in omgeving Delft zijn wij op zoek naar versterking. Ben jij op zoek naar een nieuwe uitdaging als Software Programmeur lees dan snel verder! Als ontwikkelaar kom je terecht op een afdeling van 6 medewerkers. Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed verloopt. Je zult klanten ondersteunen. Verder zul je technische ontwerpen en gebruikersdocumentaties schrijven en deze onderhouden. Er wordt voornamelijk gewerkt met PHP, Java en

Bekijk vacature »

Als PHP developer (Symfony) bijdragen aan betere z

Functie Als Medior/Senior PHP developer wordt er een mate van zelfstandigheid verwacht, maar ook dat je goed in een team kunt opereren waar kennis wordt gedeeld en er bijvoorbeeld codereviews plaatsvinden. Kwaliteit staat voorop, mede hierom werken ze bijvoorbeeld zonder echte deadlines in hun sprints. De SaaS-applicatie wordt volledig ontwikkeld in PHP en Symfony. De module bestaat uit een stuk informatie verrijking en intelligentie wat resulteert in een medische check. De logica wordt daarom in de code geïntrigeerd. Je bent onder andere bezig met complexe databases waar meer dan 80.000 medicijnen op verschillende niveaus in staan, die maandelijks worden geactualiseerd.

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

12/07/2025 15:56: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.