class zonder public method?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

REMOTE - Front-end Angular developer

Functie Het IT-team bestaat momenteel uit de IT Manager, 2 back-end developers, 1 fullstack developer, 1 designer en een DevOps engineer. Ze zijn momenteel op zoek naar een ervaren Front-end developer die autonoom en gedisciplineerd aan de slag gaat, en bij aanvang als enige developer met hun Front-end applicaties bezig is. Wel hebben ze de ambitie om hier snel een 2e developer bij te vinden die jij dan ook zal kunnen aansturen/begeleiden. Je zult aan de slag gaan met het doorontwikkelen van hun bestaande UI in Angular. Maar ook het ontwikkelen van een mobiele app. Hierbij hechten ze veel waarde

Bekijk vacature »

Front-End Developer

As a Front-End Developer at Coolblue you improve the user-friendliness of our webshop for millions of customers. How do I become a Front-End Developer at Coolblue? As a Front-End Developer you work on the user-friendliness of our webshop for millions of customers. You enjoy working with the UX Designer to pick up stories. You get energy from coming up with creative solutions and are happy to present these within the team. You also take pride in your work and welcome any feedback. Would you like to become a Front-End Developer at Coolblue? Read below if the job suits you. You

Bekijk vacature »

Junior Java Developer

Dit ga je doen Je ontwikkelt innovatieve, maatschappelijk belangrijke applicaties; Je implementeert nieuwe features; Je gaat in gesprek met eindgebruikers en designers om de applicaties continu te finetunen; Je draait mee in een professionele Agile/Scrum omgeving. Hier ga je werken Onze klant is een internationale organisatie gevestigd in de omgeving van Amsterdam. Ze staan zeer goed bekend in de markt door hun innovatieve dienstverlening op IT gebied en hun gepassioneerde werknemers. Voor hun inspanningen op het gebied van IT hebben ze meerdere prijzen gewonnen! Onze klant is onderdeel van een Corporate werkgever en heeft zelf 300 mensen in dienst. Om

Bekijk vacature »

TypeScript developer (tot € 6.000, - bruto pe

Functie Om bovenstaande ambities waar te kunnen maken zijn ze op zoek naar een ervaren Typecript developer die niet alleen zichzelf verder ontwikkelt, maar het ook leuk vinden om op termijn meer junior collega’s op pad te helpen. Je zult aan de slag gaan met het migreren van hun bestaande UI in Angular. Maar ook het ontwikkelen van een mobiele app. Hierbij hechten ze veel waarde aan User Experience en kiezen ze duidelijk voor kwaliteit i.p.v. snelheid. Je krijgt dus de ruimte om vanuit gedegen onderzoek te werk te gaan en het borgen van kwaliteit staat hoog in het vaandel.

Bekijk vacature »

Cloud Engineer

Ben jij een ervaren Cloud Engineer die complexe omgevingen kan overzien en wil je graag in vaste dienst werken bij een professioneel en kleinschalig bedrijf waar je een belangrijke rol kan spelen? Wij, IntelliMagic in Leiden, ontwikkelen specialistische IT monitoring software die we als SaaS oplossing verkopen aan grote bedrijven in Europa en de VS. We zijn een Nederlands bedrijf met een goede sfeer en met grote waardering voor de persoonlijke inbreng en kwaliteiten van onze medewerkers. Wij zoeken een ervaren Cloud Engineer met academisch denkniveau die verantwoordelijk wordt voor het beheer van de cloud infrastructuur voor onze Europese klanten.

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 ASP.NET

Samengevat: Deze werkgever is een inkooporganisatie. Ben jij een ervaren .Net ontwikkelaar? Heb je ervaring met .Net en C#? Vaste baan: C# .NET Developer .Net MBO HBO €3.100 - €4.300 Onze missie is: “Een essentiële bijdrage leveren aan het verlagen van de integrale kostprijs van de aangesloten groothandels, middels het bundelen van inkoopvolume en het creëren van synergie met en tussen de groothandels en leveranciers, met scherpe inkoopprijzen, goede handelscondities en gerichte dienstverlening als resultaat” Zij werken voor MKB klanten. Deze werkgever heeft veel verschillende projecten. Houd jij van afwisseling? Dan zit je bij hun goed! De branche van dit

Bekijk vacature »

Digitale Tovenaar Gezocht: Junior Low-code/No-code

Bedrijfsomschrijving Duik mee in een wereld vol innovatieve avonturen waar gegevens en technologie een magische symbiose aangaan! Al meer dan twee decennia lang zijn we de tovenaars achter de schermen die oplossingen creëren voor de meest complexe klantcontactvraagstukken en datagedreven software-uitdagingen. Bij ons draait het om de kracht van samenwerking en groei. We zijn een hechte vriendengroep die samen bergen verzet om elkaar én onze klanten te laten schitteren. Jouw succes is ons succes en we streven ernaar om elkaar naar nieuwe hoogten te tillen, niet voor even, maar voor altijd. We willen dat jij je helemaal thuis voelt in

Bekijk vacature »

Software developer (PHP) - Utrecht centrum

Functie Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten. Het team bestaat uit 4 developers, een klein team dus met korte lijnen. Alles in intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. In het team streven ze naast de hoogst haalbare kwaliteit. Hiervoor werken ze nauw met elkaar samen en levert

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 »

Medior/senior front end developer

Functie Vanwege de groei binnen het bedrijf zijn ze op zoek naar een Technische front end developer. Momenteel hun front end back end team gescheiden aan het werk. Hier willen ze verandering in krijgen. Omdat ook veel interne applicaties ontwikkeld worden zoeken ze iemand die hen kan helpen om de interne applicaties te voorzien van de juiste Vue.js componenten. Zodoende willen ze de interactie tussen front end en back end versoepelen en de volgende stap binnen het platform gaan zetten. Deze componenten die jij ontwikkeld zullen in elk project gebruikt worden. Het back end team bestaat momenteel uit 8 ontwikkelaars

Bekijk vacature »

SQL database developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als SQL database developer? Dit bedrijf bouwt applicaties om processen in distributiecentra te optimaliseren. Ter uitbreiding van het development team zijn wij op zoek naar een SQL database ontwikkelaar. Wil jij werken voor een groeiende werkgever in regio Breda waar jij de ruimte en tijd krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je houdt je bezig met het creëren en bouwen van MS SQL server databases; Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van logistieke processen; Je gaat projecten vanaf het begin tot het

Bekijk vacature »

Front-end (Angular) developer - remote werken

Functie Als Front-end (Angular) developer ga je aan de slag met het uitbouwen van hun webapplicatie, als één van de front-end experts ga je samen met collega’s in een devops team werken aan een nieuw front-end voor hun calculatie oplossing. Binnen de calculatiesoftware kunnen meerdere professionals tegelijk samenwerken, 3D calculaties uitvoeren en ook inzien met de benodigde specifieke details. Deze software wordt veel ingezet om projectbeschrijvingen en kosten in kaart te brengen, en tijdens de uitvoering te bewaken. Maar hiernaast liggen er in de toekomst veel meer plannen op het gebied van front-end in de andere applicaties. Genoeg te doen

Bekijk vacature »

Senior Java Ontwikkelaar

Dit ga je doen Werken aan uiteenlopende interne projecten voor grote (internationale) organisaties; Ontwikkelen van diverse (web)applicaties en platformen met technieken als Java, Azure en ASP.NET; Complexe vraagstukken tackelen met jouw expertise en ervaring; Waar nodig help jij je collega's om samen tot de juiste oplossing te komen. Hier ga je werken Als Java Developer kom je te werken bij een internationale organisatie in regio Amsterdam die zich richt op procesoptimalisatie door middel van zeer complexe IT oplossingen. Dit doen zij op het allerhoogste niveau met vestigingen over heel de wereld en met een groot aantal aansprekende, maatschappelijk betrokken klanten.

Bekijk vacature »

Fullstack developer

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en zou jij graag bij een platte maar informele organisatie werken? Voor een mooi softwarebedrijf in omgeving Alblasserdam zijn wij op zoek naar versterking op de afdeling Software Development! Als Fullstack react.js developer wordt je bij dit bedrijf onderdeel van de volledige ontwikkeling van requirement tot oplevering! Jouw focus ligt op de front end en alles wat daarbij komt kijken. Je gaat ontwerpen, ontwikkelen, testen en valideren. Je zult voornamelijk werken met React.js en Typescript. Maar ook Javascript, HTML en CSS komen aanbod. Daarnaast zal je ook regelmatig met de back

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

06/01/2025 06:31:39
 
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.