[oop] classes hergebruiken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Front-end Developer

Functie omschrijving Wij zijn op zoek naar een Front-end Developer! Als Front-end Developer binnen dit softwarebedrijf ga je de frontends voor zowel je eigen interne projecten als die voor klanten opzetten, onderhouden en uitbreiden. Je zet ideeën om naar mooie successen voor de klanten. Dat is in een notendop wat je gaat doen! Wat kun je verwachten? Je werkt aan de doorontwikkeling van bestaande maatwerkapplicaties. Bijvoorbeeld wanneer de klant de applicatie wil uitbreiden met een nieuwe feature; Samen met het team van backenders en desginers zet je nieuwe ideeën van klanten om naar mooie oplossingen; Je werkt met verschillende frameworks.

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 »

.NET developer

Functie As a .NET developer you work together in a multidisciplinary development team with 1-2 Senior .NET developers, two front-end developers, Data Scientists and one UX designer. As a team you work on developing a Cloud based application and making this application more stable. Unit testing will also become very important in your new position. Together with the Senior .NET developer you will be responsible for developing the API. You work with a lot of data and occasionally there will also be data issues and some queries will have to be run. This means that you will work a lot

Bekijk vacature »

Ambitieuze medior developer

Wat je gaat doen: Heb jij al een paar jaar ervaring als developer maar wil jij naar the next level? In ons NextLevelDev Programma helpen wij jou om de volgende stap te zetten: een mooi programma aan trainingen op het gebied van Java, hippe frameworks, Agile/Scrum, OCP-certificering en optioneel: andere JVM-talen als Kotlin en Scala; Cloud (AWS, Azure, GCP) Soc 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

Bekijk vacature »

.NET developer

Functie Als .NET developer start jij in een development team met één Senior .NET developer en één junior .NET developer. Als team zijn jullie verantwoordelijk voor het schrijven van software voor onze toonaangevende Automatiseringssystemen. Jij gaat aan de slag met de onderhoud van de kernsoftware, ondersteund de software van derden door het gebruik van onze webservices en als team zijn jullie verantwoordelijk voor het ontwikkelen van onze backend oplossingen. Wij maken op dit moment veel gebruik van .NET met ASP.NET. Komend kwartaal gaan wij wel gedeeltelijk overstappen naar .NET Core. Verder werken wij ook met SOAP, REST, JSON, HTML5, CSS3

Bekijk vacature »

Medior Java developer (fullstack)

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 »

Java Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Medior/senior Front-end developer

Functie Onder begeleiding van 3 accountmanagers waarvan er 1 binnen jouw expertise je aanspreekpunt zal zijn ga je aan de slag bij diverse opdrachtgevers. Hij of zij helpt je bij het vinden van een passende en uitdagende opdracht. Hierin houden ze uiteraard rekening met jouw situatie, ervaring en (technische) ambities. De opdrachten duren gemiddeld één tot 2 jaar. Hierdoor kun je je ook echt vastbijten in een project en als consultant impact maken. Naast de opdracht ben je regelmatig met je collega’s van de IT-afdeling om bijvoorbeeld onderlinge kennis te delen, of nieuwe trends te bespreken. Ook worden er regelmatig

Bekijk vacature »

Laravel developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »

Senior Front-end developer

Functie Als front-end developer ga je aan de slag voor verschillende klanten, waarbij veel rekening wordt gehouden met waar je woont (dit is altijd binnen het uur), en word er gezocht naar een organisatie die past bij jou. Zowel qua persoonlijke ambities als de technische aansluiting. De opdrachten duren gemiddeld 1 à 2 jaar maar dit hangt ook af van je wensen. Je werkt in een teamverband voor een klant en zult nauw samenwerken met zowel eigen collega’s als die bij de klant werkzaam zijn. Ze zijn op zoek naar een technische front-end developer die ruime ervaring heeft in één

Bekijk vacature »

Junior Software Developer

Functie omschrijving Wij zijn op zoek naar een Junior Software Developer .NET, C# voor een gaaf bedrijf in de omgeving van Utrecht! Sta jij aan het begin van je carrière en heb je net je HBO of WO-diploma in de richting van ICT of Techniek mogen ontvangen? En heb jij grote affiniteit met software development? Lees dan snel verder! Voor een opdrachtgever in de omgeving van Utrecht, zijn wij op zoek naar een Junior Software Developer. Werk jij graag aan verschillende projecten en ga je graag klanten op bezoek? Dan is dit de ideale functie voor jou! Binnen deze functie

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET Core developer wordt jij onderdeel van ons team met drie breed ontwikkelde software engineers en een flexibele schil met zes ervaren freelancers. Jij gaat mee in de visie van onze organisatie om als IoT partner in deze branche specifieke markt “het” platform te blijven innoveren en deze ook steeds slimmer te maken. Wij hopen dan ook zeker dit in de toekomst te kunnen realiseren met bijvoorbeeld Artificial Intelligence. De architectuur van ons platform is opgemaakt uit een deel eigen protocol, een interface laag en een laag welke de protocollen van derde partijen vertaald naar het eigen

Bekijk vacature »

Senior pega developer

You work on software that makes colleagues and customers happy! Thanks to your IT skills, De Mandemakers Groep really makes a difference for its customers. Do coding, testing and deployments make your heart beat faster? Then apply today as Senior Pega Developer at De Mandemakers Groep! Wat ga je doen? The job title gives it away: You will be developing Pega software. This ranges from technical design, coding and testing to test automation, deployments and bug fixing. Your goal is to continuously improve our systems so that colleagues can work efficiently and customers receive optimal service. You don't have to

Bekijk vacature »

Als Lead PHP developer bijdragen aan het onderwijs

Functie Als Lead PHP developer zet je samen met het team en de andere lead developers de technische lijnen uit als het gaat om het ontwikkelen van de applicaties en bepaal je samen met de PO waar elke sprint aan gewerkt zal worden. Je kunt op basis van een user story een goede aanpak formuleren en een planning opstellen, en andere hierin meenemen. Wanneer je team code schrijft verwacht je degelijke oplossingen, bij voorkeur gebruik makend van Domain Driven Design. Je ziet toegevoegde waarde in het beoordelen van het werk van collega’s om zo samen te streven naar hoge kwaliteit

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 »
Ozzie PHP

Ozzie PHP

28/04/2013 22:10:06
Quote Anchor link
Een kort vraagje...

Worden classes eigenlijk hergebruikt?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
require '/pad/naar/classFoo.php';
$a = new Foo();
$b = new Foo();
$c = new Foo();
?>

Ik vraag me af of als je een class inlaadt, dan alle functies bij PHP "bekend" zijn, of worden alle methods in een class telkens opnieuw ingeladen als je een nieuwe class aanmaakt??

Stel we hebben een class Foo en een class Bar. Class Bar is bijna hetzelfde als class Foo, maar heeft 2 functies minder omdat die in bepaalde situaties niet nodig zijn. Stel nu dat beide classes 15 dezelfde methods hebben en class Foo heeft er dan nog 2 extra. Stel dat PHP class Foo onthoudt, dan lijkt het me dat je beter één class (Foo) kunt gebruiken, in plaats van een class Foo en een (bijna dezelfde) class Bar. Als ik dan namelijk class Foo gebruik moeten er 17 methods worden ingeladen, maar als ik zowel class Foo als class Bar gebruik, dan moeten er 17 en 15 methods worden ingeladen.

Wie kan hier iets meer over vertellen?
 
PHP hulp

PHP hulp

08/01/2025 16:45:51
 
Wouter J

Wouter J

28/04/2013 22:23:56
Quote Anchor link
1) 2 classes die dezelfde functies hebben => foute OO
2) Classes maak je omdat dat moet door een OO ontwerp, classes maak je niet omdat het goed is voor performance
3) Kritische vragen stellen is goed, maar het is beter om eerst na te denken of die vraag wel goed is. Of je niet tever doorgaat en eigenlijk alle principes overboord gooit.
 
Ozzie PHP

Ozzie PHP

28/04/2013 22:45:03
Quote Anchor link
Wouter, grappige reactie. Het gaat er niet om of het wel of niet goed OOP is. Ik ben gewoon nieuwsgierig naar hoe iets werkt. Niks meer en niks minder. Wordt een class opgeslagen in het geheugen of niet?

Ander voorbeeld. We hebben een class User die een User aanmaakt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach($users as $user) {
  $user = new User();
}

?>

Wordt nu telkens als ik een new User aanmaak die class met al zijn methods opnieuw ingeladen? Of worden de methods alleen de 1e keer als ik een User aanmaak ingeladen?

Weet jij het antwoord op mijn vraag?
 
Reshad F

Reshad F

28/04/2013 22:54:39
Quote Anchor link
Ozzie.. Je moet hierbij denk ik back to the start gaan en even logisch nadenken. een klasse wordt alleen gerunt op runtime dus wanneer er een request komt. je hebt programmeertalen waarbij er de hele tijd requests worden gedaan ( hoeft niet per se natuurlijk ), en zelfs dan worden die dingen volgens mij niet onthouden. maar volgens mij kan dat bij php niet zover ik weet. en sowieso als je logisch gaat nadenken een klasse is niets meer dan een blauwdruk. stel de server is een timmerman met alzheimer die elke seconde alles weer vergeet. hij krijgt een opdracht en kijkt naar de blauwdruk en maakt deze aan.

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

$user
= new User();

?>


verder zou het een beetje overkill zijn als elke klass in het geheugen opgeslagen zou worden toch? stel je hebt maar een paar duizend klassen... dan zou je dus elke klasse ook moeten afsluiten wanneer je het niet meer nodig hebt.

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

$user
->close();

?>


dus volgens mij niet.
 
Ozzie PHP

Ozzie PHP

28/04/2013 23:26:24
Quote Anchor link
Reshad, thanks voor je reactie. Alleen wat jij zegt klinkt wel heel suggestief. Het zou kunnen dat je gelijk hebt, maar het zou ook net zo goed kunnen dat je geen gelijk hebt.

Voordat we een class kunnen gebruiken moeten we deze eerst requiren. Dan zou ik dus denken dat de class wél in het geheugen wordt gezet. De 2e keer dat je diezelfde class gebruikt, hoef je 'm namelijk niet meer in te laden (requiren). Vandaar dat ik dus heel benieuwd ben hoe het nu eigenlijk zit.

Stel we hebben een class die auto's maakt, dan lijkt het me eigenlijk logischer dat PHP op de een of andere manier onthoudt welke methods er allemaal inzitten, dan dat ie telkes als er een auto wordt gemaakt opnieuw weer alle methods gaat inlezen.
 
Wouter J

Wouter J

28/04/2013 23:27:07
Quote Anchor link
Ik zou het totaal niet weten, maar ik denk dat php dit wel cached.

Reshad, sorry, maar ik vind je denkwijze niet logisch. Allereerst is de server iets dat zeer goed is in het onthouden. Het enige wat hij niet kan is het bedenken wanneer iets onthouden moet worden. Gelukkig begrijpt de php engine dit wel en geeft hij de server heel vaak de opdracht iets te onthouden.

En daarnaast wordt er al heel veel onthouden, denk alleen al aan alle variabelen. Kleine moeite om een klasse te onthouden wanneer er eenmaal eentje is aangemaakt.

Merk ook op dat php voordat een klasse is aangemaakt ook al weet welke methods en properties een klasse heeft (denk aan de reflection klassen)
 
Ozzie PHP

Ozzie PHP

28/04/2013 23:47:43
Quote Anchor link
Oké... even een fictieve situatie... dus voordat daar opmerkingen over komen... dit is dus allemaal fictief. Ik ben alleen benieuwd naar jullie kijk hierop.

Stel we hebben een globale class Foo die key-value paren opslaat (bijv. een ParameterBag). Dit is een heel uitgebreide class die data kan toevoegen, editen, verwijderen, keys tellen enz. enz.

Nu wil ik op een gegeven moment key-value paren opslaan, maar ik weet 100% zeker dat ik deze paren niet ga editen of verwijderen, en keys tellen en overige functies heb ik ook niet nodig. Nu kan ik hiervoor perfect class Foo gebruiken, alleen eigenlijk is deze wel iets te uitgebreid omdat er functies inzitten die ik in dit specifieke geval niet nodig heb. Er is dus sprake van een stukje overhead binnen de class.

Zou het nu slim zijn om een extra class Bar te maken waarin alleen die methods zitten die ik in dit geval écht nodig heb? Een soort gestripte versie van class Foo dus??

Stel nu dat we 100 classes nodig hebben waarin we key-value paren opslaan en we weten dat we deze niet gaan editen, verwijderen enz. Dan kunnen we dus kiezen voor class Foo (met overhead) of voor class Bar (kleinere class, exact op maat).

Stel nu dat PHP de classes NIET onthoudt en we zouden kiezen voor class Foo, dan betekent dit dat er 100x een class wordt ingeladen met een hele hoop methods die niet worden gebruikt. Stel dat er 10 methods in staan die niet worden gebruikt, dan betektent dit dat er 10 x 100 = 1.000 onnodige methods worden ingeladen. Dan lijkt het me beter om voor de gestripte versie van clas Foo, namelijk class Bar, te gaan.

Echter, als PHP wel classes onthoudt dan maakt het niks uit. Dan kan ik net zo goed class Foo gebruiken, want de methods worden toch maar 1x ingelezen.

Het is een fictieve situatie, maar toch wel interessant om te weten vind ik. Maar of iemand hier ook het antwoord op weet? Tja...
Gewijzigd op 28/04/2013 23:52:43 door Ozzie PHP
 

29/04/2013 00:23:59
Quote Anchor link
Als ik het goed begrijp is je vraag of één class mermaals wordt ingeladen als je deze aanmaakt. Het antwoord is nee. Je moet eens spl autoload gebruiken en de autoloader class echo $class typen. Deze zal maar één keer voorkomen als je de class mermaals aanroept.

Wat er wel gebeurt is als je een class opnieuw aanmaakt dat de variabelen (!) en misschien de class zelf (?) opnieuw opgeslagen worden (getest met een kleine bench) in tegenstelling als je de class opnieuw zou gebruiken. Dit scheelde wel een hoop, maar het moet natuurlijk mogelijk zijn om dat te doen.

Maar de class wordt dus niet opnieuw geladen als je deze aanroept. Misschien wordt deze wel opgeslagen, maar ik denk dat PHP wel zo slim is om alleen de verschillen op te slaan (dus de variabelen).
Gewijzigd op 29/04/2013 00:25:48 door
 
Ozzie PHP

Ozzie PHP

29/04/2013 00:29:04
Quote Anchor link
Aaron - op 29/04/2013 00:23:59:
Als ik het goed begrijp is je vraag of één class mermaals wordt ingeladen als je deze aanmaakt. Het antwoord is nee. Je moet eens spl autoload gebruiken en de autoloader class echo $class typen. Deze zal maar één keer voorkomen als je de class mermaals aanroept.

Ja, dit klopt. Een class bestand wordt maar 1x gerequired.

Aaron - op 29/04/2013 00:23:59:
Wat er wel gebeurt is als je een class opnieuw aanmaakt dat de variabelen (!) en misschien de class zelf (?) opnieuw opgeslagen worden (getest met een kleine bench) in tegenstelling als je de class opnieuw zou gebruiken. Dit scheelde wel een hoop, maar het moet natuurlijk mogelijk zijn om dat de doen.

Je moet inderdaad een class opnieuw kunnen aanmaken, maar wordt er dan telkens voor iedere nieuwe class geheugen gereserveerd om de methods in op te slaan? Of worden de methods maar 1x opgeslagen en verwijst iedere nieuwe class naar de opgeslagen methods?

Aaron - op 29/04/2013 00:23:59:
Maar de class wordt dus niet opnieuw geladen als je deze aanroept. Misschien wordt deze wel opgeslagen, maar ik denk dat PHP wel zo slim is om alleen de verschillen op te slaan (dus de variabelen).

Hier zou je helemaal gelijk in kunnen hebben, maar ik ben benieuwd of er iemand is die dit 100% kan bevestigen (of ontkennen).
 

29/04/2013 00:46:27
Quote Anchor link
Even getest en ik kom aan een verschil van 0.03 seconden op één miljoen iteraties [zie new User()].

De ene class had maar 4 functies [setId($id), setKey($key), getId() en getKey()] en de andere class 8 functies [setId($id), setKey($key), getId(), getKey(), setAlgo($algo), setRaw($raw), getAlgo() en getRaw()]. Bij beide classes riep ik dus setId($id) en setKey($key) aan om tot een verschil van 0.03 seconden op één miljoen iteraties te komen.

Dus ik denk dat zoals mijn vermoeden al daarnet zei PHP de functies gewoon eenmaal opslaat en dan voor elke class die geopend worden de variabelen nogmaals apart opgeslagen met een soort ID.

Resultaten
[Class met 4 functies]
1.7087509632111
1.7423548698425
1.6903710365295
1.7268841266632
1.7182660102844

[Class met 8 functies]
1.7572648525238
1.759959936142
1.7442409992218
1.7827949523926
1.7658550739288

Het laden van die gestripte class duurt dus waarschijnlijk langer dan het verschil die ik hier nu heb. Ook heb je normaal gezien géén 1 miljoen objecten op één pagina...

Typo's aangepast, bench resultaten en conclusie toegevoegd
Gewijzigd op 29/04/2013 01:22:42 door
 
Ozzie PHP

Ozzie PHP

29/04/2013 00:50:32
Quote Anchor link
Hmmm, oké... interesting :)
In mijn voorbeeldje zou je dan dus beter voor class Foo (de uitgebreide variant) kunnen gaan. Interessant!
 

29/04/2013 00:57:48
Quote Anchor link
Never mind. Het onderstaande bericht klopt niet [er is een wel een heel klein verschil]! Maar alsnog is een verschil van 0.03 seconden op 1 miljoen iteraties heel erg weinig. Ik zou voor Foo gaan en Bar in de vuilbak gooien.

Er is dus wel een verschil als je een lange of korte naam gebruikt! Raar.
Gewijzigd op 29/04/2013 01:11:20 door
 
Ozzie PHP

Ozzie PHP

29/04/2013 01:05:44
Quote Anchor link
Hmmm, ik heb ook even een benchmark gedaan met 2 lege classes.
Een clas "Foo" en een class "FooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFooFoo"

Bij een miljoen iteraties zijn de tijden vrijwel gelijk. Je zou dus denken dat het niet aan de lange naam ligt.
 

29/04/2013 01:12:30
Quote Anchor link
De test nogmaals opnieuw gedaan en de tijden zijn weer normaal. Waarschijnlijk was m'n ander script even roet in het eten aan het gooien tijdens de test. Heb het vorige bericht dus ook aangepast.

Maar nogmaals, 0.03 seconden op 1 miljoen iteraties is 0.00000003 per class iteratie. Onvoorstelbaar en aangezien je een class normaal geen één miljoen keer gebruikt duurt het laden van Bar veel langer dan Foo opnieuw gebruiken.

PHP heeft dus een perfect cache mechanisme!

Typo's en toelichting aangepast
Gewijzigd op 29/04/2013 01:23:12 door
 
Wouter J

Wouter J

29/04/2013 11:00:27
Quote Anchor link
Als je 2 klassen hebt die hetzelfde doen, alleen waarbij de 1 minder methods hebt dan moet je natuurlijk geen gebruik maken van 2 klassen, maar je moet gebruik maken van inheritance.

Als de ParameterBag key-value paren vasthoudt met alle CRUD methods en een FooBag alleen key-value paren vasthoudt met create en read methods zul je dus een upperklasse (AbstractBag) moeten maken die alle over eenkomstige methods bevat, in dit geval dus alle methods van de klasse die het minste kan, de FooBag.
Vervolgens extend de FooBag en de ParameterBag deze upperklasse en voegt de ParameterBag er nog een paar extra methods bij.

Dat is kijken naar hoe het in een OO design zou moeten.
 
Ozzie PHP

Ozzie PHP

29/04/2013 14:18:42
Quote Anchor link
Thanks allebei voor de nuttige reacties!
 



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.