class zonder public method?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

Medior/senior Front-end developer

Functie Je maakt deel uit van een DevOps Scrum team en werkt samen met back-end developers, test-engineers, interaction designers en een projectmanager. Er zijn verschillende groepen Scrum teams. Een roadmap team is jouw ‘’thuisbasis’’, daar wordt gewerkt aan doorontwikkeling van bestaande omgevingen voor een aantal klanten. Hiernaast zijn er projectteams waar nieuwe omgevingen worden gebouwd, of grote complexe wijzigingen worden doorgevoerd op bestaande omgevingen. Je kunt (afhankelijk van jouw wensen en doelen) dus afwisselend werken in beide teams. Hiernaast participeer je in het Chapter Front-end development waar gezamenlijk kennis en ervaring wordt gedeeld. Als Front-end developer is het jouw doel

Bekijk vacature »

Full Stack C#.NET developer

Functieomschrijving Wij zijn op zoek naar een gepassioneerde Full Stack C#.NET Software Developer. Als Software Developer ben je verantwoordelijk voor het ontwikkelen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere ontwikkelaars en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Ontwikkelen en onderhouden van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Testen en valideren van de ontwikkelde software. Actief deelnemen aan code reviews en bijdragen aan het verbeteren van de kwaliteit van de software. Je gaat aan

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 »

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 »

C#.NET ontwikkelaar

Functie omschrijving Voor een softwarebedrijf in de omgeving van Veghel zijn we op zoek naar een C# developer. Word jij blij van ontwikkelen in C# en .NET? Lees dan snel verder! Jouw werkzaamheden zullen er als volgt uit gaan zien: Op basis van de wensen van de klant ga je samen met je collega's ga je op zoek naar de juiste oplossingen en je gaat dit uitwerken tot een mooi eindproduct. Je bouwt webshops, webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Framework en C#. Je zorgt voor de optimalisering van bestaande software en de automatisering van

Bekijk vacature »

Front-end React developer

Functie Het frontend team bestaat momenteel uit 4 dedicated front-enders en is hard aan het groeien! Ook werken er diverse designers waar je veel mee schakelt. Samen leveren jullie een essentiële bijdrage aan de applicaties die ze voor hun klanten realiseren, jij bent hierin de schakel tussen de eindgebruiker en de slimme backend. Je werkt in het frontend team samen met de backend teams en product owners om te zorgen dat onze applicaties een fijne gebruikerservaring opleveren. Ze werken o.a. met: React, Atomic design, Styled components, JavaScript / TypeScript, NPM, Webpack Blade templates, HTML, SCSS, Git flow. Eisen • HBO

Bekijk vacature »

Front-end Developer

Functie omschrijving Gezocht front-end developer! Voor een toffe organisatie in de regio Rhenen zij wij op zoek naar een front-end developer die de eindverantwoordelijkheid op zich neemt van alles wat met design te maken heeft. In deze functie heb je een adviserende rol en beschik je over een grote dosis vakinhoudelijke kennis. Samen met collega’s en klanten overleg je om aangeleverde designs om te zetten naar unieke concepten. Zo draag jij je steentje bij aan de groeiambities van de klant. Voor klanten wordt jij het vaste aanspreekpunt als het gaat over planningen hierin houdt je alle betrokkenen goed op de

Bekijk vacature »

.net developer

Hoi! Wij zijn auto.nl en wij verkopen auto's online. je bestelt bij ons een auto net zo makkelijk als een spijkerbroek. En bevalt ie niet? Dan stuur je 'm gewoon weer terug. En dat we dat goed doen bewijst onze hoge klanttevredenheid van een 9,3. Nu maken we de volgende stap bij auto.nl. We starten met fysieke winkels. Online zoeken, offline bekijken. Maar nog altijd, geen gedoe! Gewoon eerlijk, transparant en zonder zorgen een auto kopen.. Maar om dat waar te blijven maken en nóg beter te worden, zoeken we uitbreiding van ons development team. Wat ga je precies doen?

Bekijk vacature »

Medior/Senior Software Developers gezocht in de Ra

Functie Op dit moment staan er posities open voor de volgende functies: Front-end, Back-End & Fullstack software developer. Als Front-End software developer werk je met JavaScript en de bijbehorende technologieën zoals TypeScript, Angular, React, Vue en Svelte. Als Back-End software developer ben je bezig in NodeJS en doe je dit met behulp van AWS, NoSQL, REST en GraphQL. Je krijgt leuke en uitdagende opdrachten met een gemiddelde duur van anderhalf jaar. Hier werk je in een team met andere IT’ers aan het ontwikkelen en verbeteren van software. Je wordt begeleid door een accountmanager die fungeert als jouw aanspreekpunt. Het team

Bekijk vacature »

Software Developer Mendix / Maatschappelijk Betrok

Dit ga je doen Het bouwen van de Mendix applicaties in samenwerking met jouw team of zelfstandig; Werken met Scrum methodiek; Ontwikkelen van vooruitstrevende oplossingen; Meedenken over nieuwe applicaties en ontwikkelingen; On the job eigen maken van de Mendix omgeving. Hier ga je werken Deze dynamische en snelgroeiende organisatie begeeft zich in de recyclingbranche. Zij nemen op duurzame en efficiënte manier de recycling op zich. Vanwege hun snelle groei zijn zij op zoek naar een young professional die zich graag wilt ontwikkelen als Mendix Developer. Je komt te werken binnen een IT team van +/- 15 medewerkers. Het huidige ‘vaste’

Bekijk vacature »

PHP Developer (junior functie)

Functie omschrijving Wij zijn op zoek naar een PHP Developer! 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

Bekijk vacature »

Back end Node.js developer

Functie Het ontwikkelteam bestaat momenteel uit 5 (back-end) Developers, 2 systeembeheerders, 1 DevOps engineer, 1 Tech Lead en 2 Scrum Masters. Samen wordt er doorontwikkeld aan twee SaaS-platformen die in een hoog tempo doorontwikkeld moeten worden. Omdat innovatie een belangrijk speerpunt binnen de organisatie is, wordt er ook continu naar snellere en slimmere oplossingen te bedenken en realiseren. Als Back-end Developer hou jij je dagelijks bezig met vraagstukken zoals: API-development, high volume datastromen, het ontwikkelen van Bots aan de hand van A.I. Daarnaast denk en werk jij mee aan de onlineapplicaties voor klanten. Er wordt zelfstandig en in teamverband gewerkt

Bekijk vacature »

Frontend Developer

Functieomschrijving Voor de NIPV zijn wij opzoek naar een Frontend Developer. Als Frontend Developer ga jij aan de slag om dashboards te bouwen vanuit het datawarehouse. Dit stelt NIPV in staat om snel en eenvoudig bij correcte bedrijfsvoeringsinformatie te kunnen. Je ontwikkelt dashboards in PowerBI, publiceert en onderhoud die, verzameld en verwerkt feedback in overleg met het ontwikkelteam. Naast dashboards ontwikkel en onderhoud je een datamodel in Excel waarmee adviseurs, controllers en analisten in staat worden gesteld om de gegevens uit de dashboards te raadplegen en anders te filteren of bepaalde gegevens nader te verfijnen, zodat verdiepende vragen kunnen worden

Bekijk vacature »

.NET Developer

Dit ga je doen Binnen het team bouw je aan een applicatie met andere .Net Developers, testers een Product Owner en een Business Analyst. Met het team wordt de backlog besproken. In overleg claim jij jouw deel en zorgt ervoor dat onderhoud en innovatie wordt gerealiseerd. Het project dat momenteel draait is het opgraden van de omgeving. Doorontwikkelen van de huidige applicatie; Overleggen met teamleden om de backlog te verdelen; Onderhouden van de huidige omgeving; Sparren met de business en het ophalen van nieuwe requirements. Hier ga je werken De organisatie is een van de grootste landelijke aanbieder van diverse

Bekijk vacature »

Pagina: « vorige 1 2 3

Wouter J

Wouter J

11/11/2013 20:53:19
Quote Anchor link
> De een zegt dit, de ander dat.
En dus doe jij wat jij het mooist vind.
 
PHP hulp

PHP hulp

24/11/2024 03:35:05
 
Ozzie PHP

Ozzie PHP

11/11/2013 20:56:03
Quote Anchor link
jawel... maar het is niet leuk als het de ene week "blauw" is en de andere week ineens "geel"
 
Dos Moonen

Dos Moonen

11/11/2013 21:31:54
Quote Anchor link
Ozzie PHP op 11/11/2013 20:52:33:
Oké... maar iemand anders op het forum zegt dat wanneer je een object aanmaakt het altijd zo goed als gebruiksklaar moet zijn.

Dit hoeft niet perse in strijd te zijn met mijn verwachtingen van constructors. De vraag tijdens het schrijven van de constructor is dan "Wat is verplicht, wat is optioneel, en welke optionele dingen wil ik via de constructor in kunnen stellen?"
Op basis van welke parameters ik aan de constructor geef krijg in een object in de staat (state) die ik wil.
Of dit volledig geïnitialiseert is, of maar voor een deel hangt er vanaf wat ik nodig heb.
Of de constructor zo geschreven is dat het object altijd volledig geïnitialiseert uit de constructor komt, of niet hangt er vanaf wat ik nodig heb.


Zoiets is een stuk beter dan een class met alleen maar non-public methods waar jij de instatie nooit van gebruikt.
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
<?php

class Autoloader
{

    public static function init(...) {

        ...


        spl_autoload_register(array('Autoloader', 'load'));
    }


    public static function deinit() {
        ...


        spl_autoload_unregister(array('Autoloader', 'load'));
    }


    public static function load($class) {
        ...
    }
}


?>
 
Ozzie PHP

Ozzie PHP

11/11/2013 21:40:58
Quote Anchor link
Dankjewel voor je voorbeeld DOS. Wat is precies de meerwaarde om alle methods statisch te maken?

(Wanneer zou je trouwens een autoloader willen unregisteren?)
 
Dos Moonen

Dos Moonen

11/11/2013 21:59:38
Quote Anchor link
De meerwaarde?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

new Autoloader;
// versus
Autoloader::init();

?>

Zoals ik eerder zei, als ik 'new Autoloader;' zie staan -zonder het op te slaan in een variabele- ga ik er vanuit dat het weg kan. Constructors initialiseren objecten. Maar met het object wordt niets gedaan. Ik zal er waarschijnlijk niet van uit gaan dat de environment geïnitialiseert wordt door de constructor van Autoloader. De scope van een constructor is het object.

Je zou ook de hele Autoloader::init() in de global scope in je bootstrap/kernel/whatever kunnen zetten. Ik heb geen sterke voorkeur zolang je het maar niet vanuit een constructor doet!


Je kan autoloaders unregisteren om onnodige aanroepen naar die autoloader te voorkomen wanneer je voorbij een punt bent waar je die autoloader nodig had om library X correct te laten werken.
Stel je gebruikt een library om emails te versturen. De emails zijn verstuurd. Vervolgens ga je een library gebruiken om een form op te bouwen. Elk element wordt voorgesteld door zijn eigen class. Dat betekend veel calls naar de autoloaders. Waarom zou je de email library's autoloader nog laten zoeken? Wat is het nut? Het kost alleen maar tijd.
Gewijzigd op 11/11/2013 22:00:46 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

11/11/2013 22:12:59
Quote Anchor link
>> Constructors initialiseren objecten. Maar met het object wordt niets gedaan

Oké... en nu wordt het dus even lastig te begrijpen voor mij. Ik heb hier namelijk onlangs een hele discussie over gehad hier op het forum. Ik ging er vanuit dat een constructor uitsluitend bedoeld was om een class "gebruiksklaar" te maken.

Ik ga je een voorbeeld geven en dan ben ik benieuwd hoe jij dat ziet.

Stel ik heb een class waarin ik paths kan opslaan. Deze paths worden voorafgegaan door een path_prefix. Mijn idee was dan ongeveer dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$path_prefix
= 'root/foo/bar/';
$paths = new Paths($path_prefix);
$paths->add($paths_array);
?>

Wat je dus ziet is dat ik de $path_prefix meegeef aan de constructor. De constructor set $path_prefix als class property. Dit was mijn idee van wat een constructor behoort te doen. De class "gebruiksklaar" maken. Nu is de class gebruiksklaar en kun je er paden aan toevoegen.

Vorige week werd me verteld dat dat niet goed is, omdat je op deze manier direct na het constructen van de class een leeg "omhulsel" hebt. Je hebt een class waar niks in zit. Dat zou niet moeten. Daarom moet je de $paths_array direct al via de constructor meegeven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$paths
= new Paths($paths_array, $path_prefix);
?>

Er werd dus gezegd dat het "vullen" van een class door de constructor moet gebeuren, zodat je meteen na het instantiëren een "gevuld" object hebt en niet een leeg omhulsel.

Maar jij lijkt nu weer iets anders te zeggen, dus ik begin het spoor een beetje kwijt te raken... Snap je?

>> Je kan autoloaders unregisteren om ...

Ah, oke... op die manier. Duidelijk!
Gewijzigd op 11/11/2013 22:14:48 door Ozzie PHP
 
Dos Moonen

Dos Moonen

11/11/2013 22:30:27
Quote Anchor link
Programmeurs zullen vaak vuist regels voorschotelen alsof het een natuurwet is. Over het algemeen komt er dan vanzelf wel een punt waar je er achterkomt dat het niet altijd zo hoeft. En soms haalt iemand als ik opeens je hele wereld over de kop.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$path_prefix
= 'root/foo/bar/';
$paths = new Paths($path_prefix);

...
// misschien een paar regels verder, misschien 8 calls dieper, wie weet
$paths->add($paths_array);
?>

Dit is MISSCHIEN gewild. Het kan zijn dat het nodig is om een kip-of-het-ei probleem te voorkomen. Of een andere zeldzame reden.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$paths
= new Paths($paths_array, $path_prefix);
?>

Dat zal over het algemeen gewild zijn. Volgens de vuistregel is dat hoe je het doet. Het feit dat ik zeg dat het niet altijd het geval is moet je voorlopig proberen te vergeten.
Gewijzigd op 11/11/2013 22:32:20 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

11/11/2013 22:37:42
Quote Anchor link
Maar als dit is hoe het in het algemeen is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$paths
= new Paths($paths_array, $path_prefix);
?>

Dan wordt er toch ook "onderwater" een method uitgevoerd die je niet ziet?

En dan kom ik weer bij mijn eerdere voorbeeld, waar ik eigenlijk telkens geen antwoord op krijg...

Stel we hebben een taart die door een class in stukken moet worden gesneden... wie moet dan de opdracht geven om de taart in stukken te snijden:

Hier geef ik de opdracht zelf:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$taart_snijder
= new TaartSnijder($taart);
$taart_snijder->snijTaart();
$gesneden_taart = $taart_snijder->get();
?>

Maar ik kan ook de constructor de opdracht laten geven, en dan ziet de code er zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$taart_snijder
  = new TaartSnijder($taart);
$gesneden_taart = $taart_snijder->get();
?>

Beiden stukjes code doen hetzelfde, maar wat is de juiste manier? De taart moet altijd in stukken worden gesneden, dus zou ik denken dat de constructor hier opdracht voor mag geven... ???
 
Dos Moonen

Dos Moonen

11/11/2013 23:07:16
Quote Anchor link
Ozzie PHP op 11/11/2013 22:37:42:
Dan wordt er toch ook "onderwater" een method uitgevoerd die je niet ziet?

Is er zo'n methode nodig? Je kan het ook in de constructor doen zonder een andere methode er voor aan te roepen. Dus is het voor wat jij wilt doen nodig om zo'n methode te hebben?

Ozzie PHP op 11/11/2013 22:37:42:
Stel we hebben een taart die door een class in stukken moet worden gesneden... wie moet dan de opdracht geven om de taart in stukken te snijden:

Hier geef ik de opdracht zelf:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$taart_snijder
= new TaartSnijder($taart);
$taart_snijder->snijTaart();
$gesneden_taart = $taart_snijder->get();
?>

Maar ik kan ook de constructor de opdracht laten geven, en dan ziet de code er zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$taart_snijder
  = new TaartSnijder($taart);
$gesneden_taart = $taart_snijder->get();
?>

Beiden stukjes code doen hetzelfde, maar wat is de juiste manier? De taart moet altijd in stukken worden gesneden, dus zou ik denken dat de constructor hier opdracht voor mag geven... ???


Ik zou het beiden herschrijven naar iets als dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$taart
= new AppelTaart(Vorm::CIRKEL, array(new Kaneel, new Krent, new Walnoot));
$vlaai = new Vlaai(Vorm::CIRKEL, array(new Kokos, new Chocolade));

$taartMes = new TaartMes(TaartMes::DUBBELZIJDIG); // kans van 1 op 384 op een SnijWondException

$taartStukken = $taartMes->verdeel($taart, 10); // tien gelijke stukken
$vlaaiStukken = $taartMes->verdeel($vlaai, array(1, 1, 2, 2, 2, 3, 3, 5)); 8 stukken met groote van $value/array_sum(array(1, 1, 2, 2, 2, 3, 3, 5))

?>

Telkens heb ik objecten waar ik meteen iets mee kan doen.
 
Ozzie PHP

Ozzie PHP

11/11/2013 23:50:43
Quote Anchor link
Ik begrijp dat als je "extra" dingen wilt doen, dat je dan meerdere methodes hebt. Maar als dat niet zo is, wat dan? Oké, laten we bij de taarten blijven :) Stel ik heb een class die de kersen UIT de taart haalt, jawel... dat is weer eens wat anders dan de kers op de taart!

Die class kan dus niks anders dan kersen uit de taart halen. Je kunt verder niks bepalen. Stop je dan de functie die de kersen uit de taart haalt in de constructor? Of moet je een method aanroepen?

Worden de kersen door (in opdracht van) de constructor verwijderd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$kers_verwijderaar
= new KersVerwijderaar($taart); // op dit moment worden de kersen via de constructor direct verwijderd
$kale_taart = $kers_verwijderaar->getTaart();
?>

of geef je de opdracht tot het verwijderen van de kersen zelf?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$kers_verwijderaar
= new KersVerwijderaar($taart); // op dit moment zitten de kersen er nog op!
$kers_verwijderaar->verwijderKersen(); // nu pas worden de kersen verwijderd
$kale_taart = $kers_verwijderaar->getTaart();
?>

Ik ga proberen mijn vraag zo duidelijk mogelijk te formuleren. In het laatste voorbeeld zie je in de code dat de kersen worden verwijderd. Immers er staat $kers_verwijderaar->verwijderKersen(); Je zou dus kunnen zeggen dat deze code misschien duidelijker is dan het 1e voorbeeld waarin je dit niet kunt zien.

Echter... welk voorbeeld is logischer? Het enige wat de KersVerwijderaar class kan is kersen verwijderen, en dat kan ook maar 1x, want daarna zijn ze al verwijderd. Vanuit dat oogpunt is het dus logischer dat de constructor opdracht geeft om de kersen te verwijderen. Alleen je ziet dit dan niet terug in de code zoals in het 2e voorbeeld.

In dit specifieke voorbeeld, wat zou dan de juiste variant zijn. Ga je voor de logische variant (de 1e optie) die precies doet wat ie moet doen, of ga je voor de 2e variant, waarbij je eigenlijk onnodig een functie moet aanroepen, maar waardoor je wel weer duidelijker ziet wat er gebeurt?


Toevoeging op 12/11/2013 01:45:35:

Dos Moonen op 11/11/2013 21:59:38:
Je kan autoloaders unregisteren om onnodige aanroepen naar die autoloader te voorkomen wanneer je voorbij een punt bent waar je die autoloader nodig had om library X correct te laten werken.
Stel je gebruikt een library om emails te versturen. De emails zijn verstuurd. Vervolgens ga je een library gebruiken om een form op te bouwen. Elk element wordt voorgesteld door zijn eigen class. Dat betekend veel calls naar de autoloaders. Waarom zou je de email library's autoloader nog laten zoeken? Wat is het nut? Het kost alleen maar tijd.

Nog even een vraag hierover he... als ik jou goed begrijp register en unregister jij dus regelmatig autoloaders? Van de ene kant snap ik wat je doet, maar van de andere kant vraag ik me ook af of je daarmee het nut van een autoloader niet teniet doet.

Een autoloader dient voor gemakt, zodat je ongestoord classes kunt aanroepen. Op de manier hoe jij het doet, moet je nu constant autoloaders gaan registeren en unregisteren. Maak je het jezelf dan niet heel lastig?

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
<?php
// register default autoloader
// code...
// Er treedt een Exception op..
// De exception moet gemaild worden...
// register de mail autoloader
// stuur een mail
// unregister de mail autoloader
// code...
// er moet een pdf gemaakt worden
// register de pdf autoloader
// maak een pdf
// het creëren van de pdf gaat mis
// Er treedt een Exception op..
// De exception moet gemaild worden...
// register de mail autoloader
// stuur een mail
// unregister de mail autoloader
// unregister de pdf autoloader
// log de Exception
// register de logger autoloader
// log de Exception
// unregister de logger autoloader
// enz.


?>

Lijkt me wat omslachtig...
Gewijzigd op 12/11/2013 01:48:25 door Ozzie PHP
 
Ward van der Put
Moderator

Ward van der Put

12/11/2013 08:46:17
Quote Anchor link
Ozzie PHP op 11/11/2013 23:50:43:
Echter... welk voorbeeld is logischer? Het enige wat de KersVerwijderaar class kan is kersen verwijderen, en dat kan ook maar 1x, want daarna zijn ze al verwijderd. Vanuit dat oogpunt is het dus logischer dat de constructor opdracht geeft om de kersen te verwijderen. Alleen je ziet dit dan niet terug in de code zoals in het 2e voorbeeld.

In dit specifieke voorbeeld, wat zou dan de juiste variant zijn. Ga je voor de logische variant (de 1e optie) die precies doet wat ie moet doen, of ga je voor de 2e variant, waarbij je eigenlijk onnodig een functie moet aanroepen, maar waardoor je wel weer duidelijker ziet wat er gebeurt?

Een 3e variant biedt je beide in één expressie: logisch en inzichtelijk.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$kale_taart
= KersVerwijderaar::verwijderKersen($taart);
?>

Ozzie PHP op 11/11/2013 23:50:43:
Een autoloader dient voor gemakt, zodat je ongestoord classes kunt aanroepen. Op de manier hoe jij het doet, moet je nu constant autoloaders gaan registeren en unregisteren. Maak je het jezelf dan niet heel lastig?

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
<?php
// register default autoloader
// code...
// Er treedt een Exception op..
// De exception moet gemaild worden...
// register de mail autoloader
// stuur een mail
// unregister de mail autoloader
// code...
// er moet een pdf gemaakt worden
// register de pdf autoloader
// maak een pdf
// het creëren van de pdf gaat mis
// Er treedt een Exception op..
// De exception moet gemaild worden...
// register de mail autoloader
// stuur een mail
// unregister de mail autoloader
// unregister de pdf autoloader
// log de Exception
// register de logger autoloader
// log de Exception
// unregister de logger autoloader
// enz.


?>

Lijkt me wat omslachtig...

Zo omslachtig is dat soms inderdaad. Verwerk maar eens een bestelling voor een webwinkel. Een geslaagde betaling (namespace betaalprovider) leidt tot het mailen (namespace mailer) van een PDF (namespace PDF-framework) en een order (namespace fulfilment) die je meteen inschiet bij de vervoerder (PostNL namespace). En ondertussen moet je eigen framework nog iets fatsoenlijks op het scherm van de klant toveren...
Gewijzigd op 12/11/2013 08:47:02 door Ward van der Put
 
Dos Moonen

Dos Moonen

12/11/2013 09:28:43
Quote Anchor link
Ozzie PHP op 11/11/2013 23:50:43:
Die class kan dus niks anders dan kersen uit de taart halen. Je kunt verder niks bepalen. Stop je dan de functie die de kersen uit de taart haalt in de constructor? Of moet je een method aanroepen?

Worden de kersen door (in opdracht van) de constructor verwijderd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$kers_verwijderaar
= new KersVerwijderaar($taart); // op dit moment worden de kersen via de constructor direct verwijderd
$kale_taart = $kers_verwijderaar->getTaart();
?>

of geef je de opdracht tot het verwijderen van de kersen zelf?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$kers_verwijderaar
= new KersVerwijderaar($taart); // op dit moment zitten de kersen er nog op!
$kers_verwijderaar->verwijderKersen(); // nu pas worden de kersen verwijderd
$kale_taart = $kers_verwijderaar->getTaart();
?>

Ik ga proberen mijn vraag zo duidelijk mogelijk te formuleren. In het laatste voorbeeld zie je in de code dat de kersen worden verwijderd. Immers er staat $kers_verwijderaar->verwijderKersen(); Je zou dus kunnen zeggen dat deze code misschien duidelijker is dan het 1e voorbeeld waarin je dit niet kunt zien.

Echter... welk voorbeeld is logischer? Het enige wat de KersVerwijderaar class kan is kersen verwijderen, en dat kan ook maar 1x, want daarna zijn ze al verwijderd. Vanuit dat oogpunt is het dus logischer dat de constructor opdracht geeft om de kersen te verwijderen. Alleen je ziet dit dan niet terug in de code zoals in het 2e voorbeeld.

In dit specifieke voorbeeld, wat zou dan de juiste variant zijn. Ga je voor de logische variant (de 1e optie) die precies doet wat ie moet doen, of ga je voor de 2e variant, waarbij je eigenlijk onnodig een functie moet aanroepen, maar waardoor je wel weer duidelijker ziet wat er gebeurt?

Dit klinkt echt alsof je puur een object wilt aanmaken omdat het kan. Wat voor redenen heb jij dat dit een object MOET worden en het dus geen functie/static method kan zijn?
 
Ozzie PHP

Ozzie PHP

12/11/2013 13:46:57
Quote Anchor link
>> Zo omslachtig is dat soms inderdaad. Verwerk maar eens een bestelling voor een webwinkel. Een geslaagde betaling (namespace betaalprovider) leidt tot het mailen (namespace mailer) van een PDF (namespace PDF-framework) en een order (namespace fulfilment) die je meteen inschiet bij de vervoerder (PostNL namespace). En ondertussen moet je eigen framework nog iets fatsoenlijks op het scherm van de klant toveren...

Maar ga je die namespaces dan echt pas registreren op het moment dat je ze nodig hebt? En dan als bijv. de mail verstuurd is, ga je dan de e-mailnamespace weer unregisteren? Registreer je niet alles gewoon in 1x, waarbij je de belangrijkste namespaces als eerst registreert?

>> Dit klinkt echt alsof je puur een object wilt aanmaken omdat het kan. Wat voor redenen heb jij dat dit een object MOET worden en het dus geen functie/static method kan zijn?

Dat is een goede vraag. Het voorbeeld in de praktijk is dat ik bijv. een aantal services wil configureren op het moment dat deze nog niet gecached zijn. Ik heb een class die de betreffende services ophaalt uit de cache, maar als het cache bestand niet bestaat dan moeten een aantal services geconfigureerd worden. Hier wil ik een aparte class voor gebruiken. (Wat ik nu vertel heeft trouwens betrekking op het initialisatieproces van het request.)

Feitelijk krijg je dus zoiets als dit:

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
<?php
class Foo {

  public function get() {
    // haal de services op uit de cache
    // indien geen cache:

    $services_configurator = new ServiceConfigurator();
    return $services_configurator->get();
  }

}


class ServiceConfigurator {

  private $services;

  public function __construct() {
    $this->configure();
  }


  public function configure() {
    // configure the services
    $this->services = $services;
  }


  public function get() {
    return $this->services;
  }
}


?>

Dit is ongeveer het idee. Hier lijkt het me logischer om de method configure() in de constructor te stoppen, in plaats van deze handmatig aan te roepen.

P.s. ik ben m'n autoloader dynamisch aan het maken... Ik ben nog wel even benieuwd. Ik wil ook een PSR0 autoload method toevoegen, maar aan welke exacte eisen moet deze voldoen? Weet iemand dat?
Gewijzigd op 12/11/2013 13:48:57 door Ozzie PHP
 
Dos Moonen

Dos Moonen

12/11/2013 13:55:00
Quote Anchor link
Ozzie PHP op 12/11/2013 13:46:57:
P.s. ik ben m'n autoloader dynamisch aan het maken... Ik ben nog wel even benieuwd. Ik wil ook een PSR0 autoload method toevoegen, maar aan welke exacte eisen moet deze voldoen? Weet iemand dat?

https://github.com/php-fig/fig-standards/tree/master/accepted
 
Ozzie PHP

Ozzie PHP

12/11/2013 13:59:36
Quote Anchor link
Super!

Ik dacht trouwens dat een class-naam niet met een slash behoort te beginnen?

Ik gebruik Foo\Bar\FooBar, maar in de voorbeelden zie ik bijv. \Symfony\Core\Request
Moet een class wel of niet met een slash beginnen?
Sorry, ik zat te slapen.
Gewijzigd op 12/11/2013 14:06:17 door Ozzie PHP
 
Dos Moonen

Dos Moonen

12/11/2013 14:02:31
Quote Anchor link
Ozzie PHP op 12/11/2013 13:59:36:
Super!

Ik dacht trouwens dat een class-naam niet met een slash behoort te beginnen?

Ik gebruik Foo\Bar\FooBar, maar in de voorbeelden zie ik bijv. \Symfony\Core\Request
Moet een class wel of niet met een slash beginnen?

http://www.php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.full

De hele pagina lezen kan geen kwaad.
 
Ozzie PHP

Ozzie PHP

12/11/2013 14:05:33
Quote Anchor link
Never mind Dos... stomme vraag... ik zat ff niet goed op te letten :)

Snaptje je mijn voorbeeld van de ServiceConfigurator?
 
Wouter J

Wouter J

12/11/2013 14:25:12
Quote Anchor link
>> Ik wil ook een PSR0 autoload method toevoegen, maar aan welke exacte eisen moet deze voldoen? Weet iemand dat?

Nou, lees eens de PSR-0 specificatie en je weet het... Een beetje moeite doen mag ook wel.
 
Ozzie PHP

Ozzie PHP

12/11/2013 14:33:14
Quote Anchor link
Dat had ik ook gedaan Wouter... niet van die suggestieve aannames aub. Dos had inmiddels al een perfecte link geplaatst.
 

Pagina: « vorige 1 2 3



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.