autoloader

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior Front end developer React

Functie Voor deze functie ben ik op zoek naar een enthousiaste front end developer die communicatief vaardig is. Jij wordt onderdeel van een enthousiast jong team dat werkt aan grote websites. Binnen jouw rol ben jij diegene die de vertaling maakt van design naar functionele code en zorg jij voor goede experience op meerdere platformen. Dit doe je natuurlijk door gebruik te maken van Javascript, HTML, CSS en React. Daarnaast wordt er gebruik gemaakt van Webcomponents en verschillende authenticatie tools. Doordat er hier gestreefd wordt naar de beste gebruikerservaringen, wordt het product constant doorontwikkeld. Hierdoor blijven ze voor op de

Bekijk vacature »

Junior PHP Developer

Functieomschrijving Junior PHP Developer gezocht! Voor een opdrachtgever in de regio Gelderland zijn wij op zoek naar een Junior PHP Developer die onderdeel gaat worden van het ontwikkelingsteam van deze organisatie. In deze functie ga jij aan de slag met het schrijven van software voor de aansturing van en het managen van windparken en bijbehorende onderdelen. Hiernaast ga jij je bezighouden met het ontwikkelen, testen en onderhouden van diverse webapplicaties. Het team waarin je komt te werken bestaat uit 3 developers, hierdoor krijg je veel verantwoordelijkheid en de kans om jezelf verder te ontwikkelen. Er wordt echter wel van je

Bekijk vacature »

Senior PHP developer/ Software Architect

Functie Momenteel zijn ze op zoek naar een ervaren PHP developer die zichzelf graag bezighoudt met zaken als architectuur en de algehele verbetering van structuren en standaarden. Het is eigenlijk meer operationeel als uitvoerend omdat je bezig gaat met zaken als het verder uitrollen en verbeteren van testautomatisering, codereviews, tickets en de doorloop hiervan en architectuurkeuzes. Mocht je hiernaast ook wat DevOps kennis meenemen is dit mooi meegenomen! Vanwege het kleine team maar de wereldwijde impact die zij leveren is er veel focus op kwaliteit. In deze functie werk je aan één van hun belangrijkste applicaties. Hierin werk je nauw

Bekijk vacature »

Team Lead/ Lead developer gezocht (Hands-on, PHP,

Functie Als Team Lead ben je de leider van één van de ontwikkelteams binnen de organisatie. Je leidt als lead developer een goed draaiend team dat werkt aan complexe en duurzame applicaties en API’s. Vanuit je kennis en ervaring ben je in staat het grote plaatje te blijven overzien, en kritisch mee te denken over bijvoorbeeld de architectuur, maar ook de algehele aanpak binnen het project. Je laat je team niet alleen technisch goed functioneren maar ben ook betrokken bij het menselijke aspect. Zo weet jij je collega’s te motiveren en begeleiden in hun dagelijkse werk. Buiten het team ben

Bekijk vacature »

Ambitieuze Junior/Medior Low-code Developers gezoc

Bedrijfsomschrijving Transformeer bedrijven met jouw expertise in innovatieve technologie Ben je een bedreven softwareontwikkelaar met ervaring in Low-code platformen, of sta je te popelen om je in deze baanbrekende oplossing te verdiepen? Wij zijn op zoek naar jou! Ons klantenbestand groeit en we willen ons team uitbreiden met deskundige en leergierige Low-code specialisten. Is het jouw passie om organisaties te ondersteunen in hun digitale transformatie en maatwerkoplossingen te bieden met behulp van geavanceerde software? Wij zijn een vooruitstrevend bedrijf dat dagelijks werkt aan het oplossen van complexe vraagstukken om de digitale ambities van onze klanten te realiseren. Functieomschrijving Ontwikkel op

Bekijk vacature »

Software Ontwikkelaar .NET te Zaandam

Bedrijfsomschrijving Je komt hier terecht bij een door-en-door softwarebedrijf, waarbinnen meerdere SaaS pakketten worden ontwikkelt voor diverse sectoren. Hierbij kun je denken aan bijvoorbeeld de logistieke en medische branche. Deze organisatie kenmerkt zich door de hoge mate van complexiteit in de applicaties, wat betekent dat jij je hier niet zal gaan vervelen. Integendeel: Jij gaat hier elke dag ontzettend veel leren en je in razend tempo ontwikkelen als C# .Net Developer met focus op back-end. Het team bestaat uit ongeveer 20 personen personen, waarvan het grootste deel zich richt op software development. De sfeer is informeel en professioneel. De producten

Bekijk vacature »

Database Developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als Database Developer met MS SQL of een vergelijkbare database? Wil jij werken voor een gewaardeerde werkgever in regio Tilburg waar jij de tijd en ruimte 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 gaat projecten vanaf het begin tot het eind begeleiden. Je sluit aan bij meetings met klanten om hun processen in kaart te brengen. Vervolgens voer jij het project uit en zorgt dat dit zo goed mogelijk verloopt; Je werkt

Bekijk vacature »

Junior Software developer

Functie Als junior .NET ontwikkelaar start jij in een compact team met drie ervaren .NET ontwikkelaars. Wij werken op projectbasis en begeleiden zelf het hele traject van A tot Z. Wij bieden jou dan ook een brede functie aan met veel technische uitdaging! Ons traject ziet er als volgt uit: 1) Wij analyseren de behoefte van onze klant 2) Wij werken de behoefte uit en vertalen dit naar technische werkzaamheden en maken een uren/kosten schatting; 3) Wij gaan aan de slag met het ontwikkelen van het product met directe feedback van de klant, zodat datgene gerealiseerd wordt, wat gewenst is;

Bekijk vacature »

Software developer (Python)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en houden ze zo nu en dan pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Je hebt in je werk oog voor kwaliteit, risico’s en het klantbelang. Communicatie met

Bekijk vacature »

.NET developer

Functie Als ervaren .NET ontwikkelaar ontbreekt er aan passie en motivatie niks. Jij bent communicatief sterk en pakt iedere uitdaging dan ook met beide handen aan. Op projectbasis ga jij met je team of met enkele andere ontwikkelaars intern aan de slag bij diverse partners. Op basis van het project ga jij aan de slag en zijn de werkzaamheden en technieken erg divers. Jouw werkgever stelt jouw ontwikkeling hierin voorop, zo krijg je een vast vertrouwenspersoon die één keer in de maand op locatie van jouw project zal kijken hoe het gaat en of er eventuele aandachtspunten zijn. Daarnaast krijg

Bekijk vacature »

Dynamische Oracle/APEX Ontwikkelaar in de logistie

Bedrijfsomschrijving De organisatie in de regio Rotterdam is gespecialiseerd in het ontwikkelen van moderne webbased software voor de ERP branche. In totaal is er 20FTE aan specialisten actief binnen de organisatie. De ICT afdeling bestaat momenteel uit 15FTE. Ze groeien ontzettend hard en daarom zoeken zij een Oracle/APEX Developer die het reeds sterke team nog sterker komt maken. Hier werken ze op projectbasis voor verschillende grote organisaties in de logistieke sector. Het is een informele organisatie waarbinnen een fijne werksfeer heerst. Zoals aangegeven willen ze het team nog sterker maken en daarvoor zoeken ze bij voorkeur medior of senior Oracle/APEX

Bekijk vacature »

Applicatie ontwikkelaar

Functie omschrijving Zelfstandige applicatie ontwikkelaar gezocht voor familiair bedrijf in omgeving Capelle ad Ijssel Ben jij op zoek naar een nieuwe uitdaging en zoek jij een informele werkgever waar je zelfstandig kunt werken binnen een leuk IT team, lees dan snel verder want wie weet zijn wij op zoek naar jou! Een deel van jouw werkzaamheden: Onderhouden en ontwikkelen van de IT systemen; Opzetten van Azure Cloud systemen, denk aan interfaces, hardware op de Cloud, webportalen of BI functies; Werken aan scripts binnen verschillende software applicaties, denk aan ERP en CAD; Ontwikkelen en implementeren van MS PowerApps en Power BI.

Bekijk vacature »

Laravel PHP developer in een jong team

Bedrijfsomschrijving Als je op zoek bent naar een werkplek waar plezier en uitdaging hand in hand gaan, dan is dit bedrijf de juiste keuze voor jou. Hier kun je werken aan uitdagende projecten en krijg je als developer veel verantwoordelijkheid. Het bedrijf waardeert kwaliteit boven kwantiteit en richt zich op het ontwikkelen van hoogwaardige applicaties en websites waar klanten enthousiast over zijn. Dit bedrijf is vooruitstrevend en streeft naar het leveren van de best mogelijke resultaten voor hun klanten. Als medior PHP ontwikkelaar met 3 jaar ervaring ben jij de persoon die we zoeken. Je krijgt hier de kans om

Bekijk vacature »

Lead Webdeveloper

Als Lead webdeveloper bij KUBUS ben je verantwoordelijk voor het implementatie design van requirements en de software architectuur van de webapplicatie en services van BIMcollab. In je rol als lead developer zoek je als vanzelf op een creatieve manier naar het optimum tussen benodigde implementatie-tijd, de performance van de applicatie en een snelle go-to-market van features, aansluitend bij onze geautomatiseerde test- en release train. Hierbij bewaak je in samenwerking met de andere senior ontwikkelaars in je team de architectuur van de applicatie en adviseer je de product owner over noodzakelijke refactoring om de onderhoudbaarheid van het platform te verbeteren. Ons

Bekijk vacature »

.NET Developer

Functie omschrijving Net afgestudeerd en op zoek naar een leuke baan als developer? Zoek niet verder! Ik heb een functie beschikbaar als back-end developer, bij een leuk familiebedrijf. Je gaat werken met de Microsoft stack en de technieken C# en .NET. Verder maak je gebruik van MVC en Entity framework. SQL kent ook geen geheimen voor jou. Jouw verantwoordelijkheden: Nieuwe maatwerk software bouwen; API koppelingen bouwen; Applicaties en software optimaliseren; Back-end programmeren. Een erg uitdagende functie, met veel vrijheid. Je kan meerdere dagen thuis werken en als je op kantoor werkt wordt de lunch verzorgd. Heb je interesse, reageer dan

Bekijk vacature »

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

05/10/2013 00:31:10
Quote Anchor link
Ola,

Ik ga een autoloader maken die automatisch classes inlaadt. Nu wil ik gaan werken met een library met classes, maar naast die library wil ik ook gaan werken met "modules" die een eigen controller en model hebben. Behalve de classes uit de library hebben we dus ook controllers en models.

Nu vraag ik me af of het wijs/handig is om de models en controllers ook via de autoloader te laden. Stel we hebben een class "Product", en een bijbehorende module Product met daarin een ProductController en een ProductModel. Stel dat ik dan een nieuwe ProductController nodig heb, dan zou ik kunnen zeggen:

$product_controller = new ProductController();

De autoloader ziet nu dat de class-naam eindigt op "Controller" en weet dus dat het de bedoeling is om een controller in te laden.

Het feit is echter wel dat in 1 page request misschien wel tientallen classes moeten worden ingeladen, maar slechts enkele controllers/models.

Door nu telkens te controleren of de clas-naam eindigt op "Controller" of "Model" (wat in 90% van de gevallen niet zo zal zijn) vertraag ik de boel dus behoorlijk.

Nu is mijn vraag, is er een hele slimme/snelle manier om te controleren of de class-naam eindigt op "Controller" of "Model", of wordt dat sowieso een kwestie van substrings vergelijken? En mijn 2e vraag, zou het beter zijn om de controllers en models via een method in te laden in plaats van via de autoloader, zoiets als:

$product_model = $this->loadModel('Product');

Reacties zijn welkom!
Gewijzigd op 05/10/2013 00:34:03 door Ozzie PHP
 
PHP hulp

PHP hulp

06/11/2024 00:43:16
 
Wouter J

Wouter J

05/10/2013 01:01:16
Quote Anchor link
Zucht... snelheid. String functies (zoals substr) zijn de snelste PHP functies, wees niet bang en gebruik ze gewoon...

Daarnaast kijk eens naar PSR-0 en PSR-4, die bevatten wel mooie richtlijnen voor het schrijven van een autoloader. En ja, ALTIJD autoloader gebruiken.
 
Ozzie PHP

Ozzie PHP

05/10/2013 01:06:02
Quote Anchor link
okidokiej :)
thanks!
 
- Raoul -

- Raoul -

05/10/2013 02:29:53
Quote Anchor link
Waarom gebruik je niet gewoon de autoloader van Composer?
 
Ward van der Put
Moderator

Ward van der Put

05/10/2013 11:10:09
Quote Anchor link
Ozzie PHP op 05/10/2013 00:31:10:
Nu vraag ik me af of het wijs/handig is om de models en controllers ook via de autoloader te laden. Stel we hebben een class "Product", en een bijbehorende module Product met daarin een ProductController en een ProductModel. Stel dat ik dan een nieuwe ProductController nodig heb, dan zou ik kunnen zeggen:

$product_controller = new ProductController();

De autoloader ziet nu dat de class-naam eindigt op "Controller" en weet dus dat het de bedoeling is om een controller in te laden.

De autoloader hoeft niets te "zien" of te "weten", maar laadt gewoon automatisch Product.php of ProductController.php of ProductModel.php zodra je één van de klassen gebruikt. Het hele eiereneten bij een autoloader is juist dat je niet eerst van alles gaat zitten laden, maar pas iets laadt wanneer het nodig is.

Ik gebruik zelf inderdaad de autoloader uit PSR-0 met een kleine aanpassing. Dan moet je echter ook wel kiezen voor namespaces.
 
Wouter J

Wouter J

05/10/2013 13:18:07
Quote Anchor link
" Dan moet je echter ook wel kiezen voor namespaces."

Hoeft niet, ook de PEAR methoden worden nog ondersteund.
 
Ward van der Put
Moderator

Ward van der Put

05/10/2013 13:44:51
Quote Anchor link
Wouter, er is een duidelijke overlapping in de strategieën voor autoloading. PSR-0 formaliseert de status quo die we deels van PEAR kennen, zodat de interoperabiliteit verhoogd wordt.

Maar je hebt verder wel gelijk: ik vind dat je anno 2013 namespaces moet gebruiken, dus dat is zeker een waardeoordeel.
 
Ozzie PHP

Ozzie PHP

05/10/2013 15:50:29
Quote Anchor link
Ward van der Put op 05/10/2013 11:10:09:
De autoloader hoeft niets te "zien" of te "weten", maar laadt gewoon automatisch Product.php of ProductController.php of ProductModel.php zodra je één van de klassen gebruikt. Het hele eiereneten bij een autoloader is juist dat je niet eerst van alles gaat zitten laden, maar pas iets laadt wanneer het nodig is.

Ward, ik snap niet precies wat je hiermee wilt zeggen. Een autoloader treedt pas in werking op het moment dat er een class wordt aangeroepen die nog niet is ingeladen. Ik ga toch niet "van alles zitten laden"? Ik denk dat je me niet helemaal correct begrepen hebt.

Ik heb vroeger wel eens gewerkt met Zend Framework 1 en ik vind de manier van class benamingen (met underscores) wel fijn. Die namespacing dat bevalt me op de een of andere manier niet en dus hou ik het graag bij de "oude" manier. De autoloader weet aan de hand van een class-naam welk bestand hij moet inladen. En daar ging mijn vraag dus over. 95% van de classes die ik zal inladen zal een normale library class zijn. 5% zal een controller of model zijn (deze staan in een andere directory dan de library classes). Als ik controllers en models ook via de autoloader inlaadt, dan betekent dit dat er in 95% van de gevallen onnodig zal worden gecontroleerd of het om een controller of model gaat. Is dat wel slim is mijn vraag. Of moet ik de controllers en models via een aparte functie aanroepen (en dus niet via de autoloader). Dat is mijn vraag.
Gewijzigd op 05/10/2013 15:52:40 door Ozzie PHP
 
NOLot -

NOLot -

05/10/2013 16:22:43
Quote Anchor link
Als jij een namespace en een bijbehorende directory toevoegt, kun je een hele simpele check maken bij het laden van je class. Je loopt door al je toegevoegde directories heen, en pas zodra de namespace hetzelfde is ga je checks doen van file_exists enzo.

Symfony doet het ook: https://github.com/symfony/symfony/blob/master/src/Symfony/Component/ClassLoader/UniversalClassLoader.php#L295

Op die manier geldt dat "onnodig controleren" ook niet echt, aangezien hij al meteen na de if statement afkapt

Edit: en als antwoord, one autoloader to rule them all...
Gewijzigd op 05/10/2013 16:24:19 door NOLot -
 
Ozzie PHP

Ozzie PHP

05/10/2013 16:29:18
Quote Anchor link
NOLot, thanks... maar ik ben niet gewend met namespaces te werken, en ik snap het principe ook niet zo goed.

Stel ik heb een fictieve class, een xml loader. Bij mij zou die dan in de library komen te staan in de directory "xml". zoiets als dit:

/library/xml/loader.php

De class-naam zou dan zijn xml_loader. Als ik de xml loader zou nodig hebben, dan doe ik dit:

$xml_loader = new xml_loader();

Aangezien de class nog niet is geladen, wordt de autoload functie geactiveerd. Aan de hand van de class-naam "xml_loader" gaat deze automatisch het juiste bestand "/library/xml/loader.php" inladen.

Zo is hoe ik het nu ongeveer doe.
 
Ward van der Put
Moderator

Ward van der Put

05/10/2013 16:33:02
Quote Anchor link
De autoloader laadt elke klasse. Wanneer die nodig is. Zodra die nodig is.

Waarom moet de autoloader dan controleren om welke type klasse het gaat? Dat is niet de taak van de autoloader: andere klassen bepalen welke klassen zij nodig hebben, de autoloader laadt ze vervolgens alleen maar.
 
NOLot -

NOLot -

05/10/2013 16:40:51
Quote Anchor link
Ozzie PHP op 05/10/2013 16:29:18:
NOLot, thanks... maar ik ben niet gewend met namespaces te werken, en ik snap het principe ook niet zo goed.

Stel ik heb een fictieve class, een xml loader. Bij mij zou die dan in de library komen te staan in de directory "xml". zoiets als dit:

/library/xml/loader.php

De class-naam zou dan zijn xml_loader. Als ik de xml loader zou nodig hebben, dan doe ik dit:

$xml_loader = new xml_loader();

Aangezien de class nog niet is geladen, wordt de autoload functie geactiveerd. Aan de hand van de class-naam "xml_loader" gaat deze automatisch het juiste bestand "/library/xml/loader.php" inladen.

Zo is hoe ik het nu ongeveer doe.


Dat voorbeeld ging niet over namespaces, maar classes met underscore.

Als jij je classes xml_loader noemt dan wordt het wel even zoeken ja voor de autoloader. Vooral als je dan ook je controllers home_indexcontroller noemt. Maar uiteindelijk is een autoloader altijd beter dan geen autoloader
 
Ozzie PHP

Ozzie PHP

05/10/2013 16:42:39
Quote Anchor link
"De autoloader laadt elke klasse. Wanneer die nodig is. Zodra die nodig is."
Dit is geheel duidelijk.

"Waarom moet de autoloader dan controleren om welke type klasse het gaat?"
Hij moet dat weten, omdat een model of controller in een andere map dan de library staat. Hij moet dus een ander pad aanroepen.

"Standaard" classes staan in de map library, maar een model staat in map foo, en een controller in map bar. De autoloader moet dus (aan de hand van de class-naam) weten waar hij het bestand moet zoeken. Is het zo duidelijker wat ik bedoel?

Toevoeging op 05/10/2013 16:46:07:

"Als jij je classes xml_loader noemt dan wordt het wel even zoeken ja voor de autoloader."

Nee, juist niet. Het geeft precies aan waar hij moet zoeken.
 
Ward van der Put
Moderator

Ward van der Put

05/10/2013 16:49:38
Quote Anchor link
Lees PSR-0 dan eens goed?! Die recommendation slaat een brug tussen namespaces en underscores.

OzzieCore_Product_Controller == /OzzieCore/Product/Controller.php
OzzieCore_Product_Model == /OzzieCore/Product/Model.php

Het is twee handen op één buik. Het werkt als je geen namespaces gebruikt. En het blijft werken als je alsnog namespaces gaat gebruiken. Het werkt zelfs in een gemengde omgeving, als je iets van een ander inhaakt op je eigen project.
 
Ozzie PHP

Ozzie PHP

05/10/2013 16:52:45
Quote Anchor link
Ward thanks, maar ik snap niet hoe dat namespacing werkt.

OzzieCore_Product_Controller == /OzzieCore/Product/Controller.php

Is "OzzieCore_Product_Controller" de class-naam? En wat is het verschil met namespacing en hoe ik het nu doe?
 
NOLot -

NOLot -

05/10/2013 17:12:42
Quote Anchor link
Ozzie PHP op 05/10/2013 16:42:39:
"Als jij je classes xml_loader noemt dan wordt het wel even zoeken ja voor de autoloader."

Nee, juist niet. Het geeft precies aan waar hij moet zoeken.


Nee juist niet :) Omdat jij geen namespaces gebruikt zul je dus je classes moeten prefixen met library_xml_loader en controller_home_indexcontroller als je niet wilt dat je autoloader nutteloos directories door gaat zoeken
 
Ward van der Put
Moderator

Ward van der Put

05/10/2013 17:19:37
Quote Anchor link
NOLot - op 05/10/2013 17:12:42:
Omdat jij geen namespaces gebruikt zul je dus je classes moeten prefixen met library_xml_loader en controller_home_indexcontroller als je niet wilt dat je autoloader nutteloos directories door gaat zoeken

Je hoeft geen include_path te gebruiken. Je kunt de autoloader ook direct op een specifiek bestand afsturen. Alleen... dat werkt veel makkelijker als je een namespace-achtige directorystructuur gebruikt. Dan kun je de underscore _ vervangen door de constante DIRECTORY_SEPARATOR.

Mijn autoloader ziet er als volgt uit. PSR-0 met twee kleine extra's.

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
<?php
/**
 * AutoLoader
 *
 * Load by vendor\class or by namespace\class:
 *
 *     autoload('StoreCore_Database');
 *
 * Load by namespace\package\class, by vendor\package\class,
 * or by package\subpackage\class:
 *
 *     autoload('StoreCore_Payments_iDEAL');
 *
 * @author  Ward van der Put <[email protected]>
 * @link    https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
 * @param   string $classname
 * @return  void
 * @version 1.0
 */

function autoload($classname)
{

    $classname = ltrim($classname, '\\');
    $filename  = '';
    $namespace = '';
    if ($last_namespace_position = strrpos($classname, '\\')) {
        $namespace = substr($classname, 0, $last_namespace_position);
        $classname = substr($classname, $last_namespace_position + 1);
        $filename  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }

    $filename .= str_replace('_', DIRECTORY_SEPARATOR, $classname) . '.php';

    /**
     * De volgende aanvulling op het voorbeeld van de functie autoload() uit
     * PSR-0 maakt het pad naar het bestand met een klasse absoluut in plaats
     * van relatief.  Dit verkort de laadtijd.
     */

    $filename = __DIR__ . DIRECTORY_SEPARATOR . $filename;

    require $filename;
}


/** Register the autoloader */
spl_autoload_register('autoload');
?>
Gewijzigd op 05/10/2013 17:20:06 door Ward van der Put
 
Ozzie PHP

Ozzie PHP

05/10/2013 17:24:33
Quote Anchor link
@NOLot:

Ah, nu begrijp je me! :)

Ja, daar heb je gelijk in. Mijn idee was dus... alle classes staan in de library, dus hoef ik de class-naam niet te prefixen met library. Echter, als ik dus ook models en controllers ga gebruiken die in een andere directory staan wordt het een ander verhaal... Dan zou ik zoals jij zegt dit kunnen doen:

"controller_home_indexcontroller"

Of... ik laat de class-naam eindigen op "controller".

"home_indexcontroller"

Ik controleer dan of de class-naam eindigt op "controller" (of op "model") en zo ja, dan weet ik dat ik niet de library directory moet gebruiken, maar de model of controller directory. Maar dit kost dus wel telkens 2 extra controles, namelijk "eindigt de class-naam op model, zo nee... eindigt de class-naam op controller, zo nee... aha, dan ben ik dus een library class".

Ik ben in ieder geval blij dat jij nu precies begrijpt wat ik bedoel.

Is er dan een manier waarop namespaces me gaan helpen? En zo ja... kun je een klein voorbeeldje geven, zodat ik het principe snap?

@Ward:

Thanks, maar ik snap het principe van die namespaces nog niet. Wat is nou eigenlijk een namespace, en wat is het voordeel ten opzichte van hoe ik het nu doe (via de oude manier)?
 
Wouter J

Wouter J

05/10/2013 17:27:37
Quote Anchor link
Ozzie, en wat als je nou buiten het framework om andere klassen gaat aanmaken dan controllers en models? Dan weet de autoloader totaal niet meer waar je moet zoeken.

Dan kun je dus 2 dingen doen: Een autoloader voor je library maken en een autoloader voor je project klassen. dit kan best.
Of je zorgt ervoor dat de autoloader deze al uit zichzelf uit elkaar houdt doordat je ze prefixed met een zogenaamde 'vendor' naam. Bijv. library_xml_reader en ozzie_xml_reader. De eerste zou worden gezocht in library/xml/reader.php en de andere in ozzie/xml/reader.php

Merk overigens op dat xml_reader ook al een namespace is.

Offtopic:
Ward, de PSR-0 namespaces waren eerst de PEAR autoloading, dus Ozzie_Xml_Reader -> Ozzie/Xml/Reader.php De PSR-0 namespaces zijn later aangepast, toen PHP5.3 namespaces ging ondersteunen: Ozzie\Xml\Reader -> Ozzie/Xml/Reader.php

PSR-4 is nu bijna officieel en daarin gaat het nog een stapje verder, door te doen wat de composer autoloader doet: Werken met package en vendor namen. Stel je hebt een pagina "config" met de vendor "ozzie" dan wordt een klasse Ozzie\Config\Xml\Reader.php gezocht in ozzie-config/Xml/Reader.php
 
Ozzie PHP

Ozzie PHP

05/10/2013 17:35:01
Quote Anchor link
Wouter, thanks.

"Of je zorgt ervoor dat de autoloader deze al uit zichzelf uit elkaar houdt doordat je ze prefixed met een zogenaamde 'vendor' naam. Bijv. library_xml_reader en ozzie_xml_reader."

Maar dit betekent simpelweg dat ik mijn class dus niet xml_reader noem, maar library_xml_reader?

Dus:

$xml_reader = new library_xml_reader();

Zo bedoel je? (en is dit dan wat je noemt namespacing?)
 
NOLot -

NOLot -

05/10/2013 17:37:09
Quote Anchor link
Ozzie PHP op 05/10/2013 17:24:33:
@NOLot:

Ah, nu begrijp je me! :)

Ja, daar heb je gelijk in. Mijn idee was dus... alle classes staan in de library, dus hoef ik de class-naam niet te prefixen met library. Echter, als ik dus ook models en controllers ga gebruiken die in een andere directory staan wordt het een ander verhaal... Dan zou ik zoals jij zegt dit kunnen doen:

"controller_home_indexcontroller"

Of... ik laat de class-naam eindigen op "controller".

"home_indexcontroller"

Ik controleer dan of de class-naam eindigt op "controller" (of op "model") en zo ja, dan weet ik dat ik niet de library directory moet gebruiken, maar de model of controller directory. Maar dit kost dus wel telkens 2 extra controles, namelijk "eindigt de class-naam op model, zo nee... eindigt de class-naam op controller, zo nee... aha, dan ben ik dus een library class".

Ik ben in ieder geval blij dat jij nu precies begrijpt wat ik bedoel.

Is er dan een manier waarop namespaces me gaan helpen? En zo ja... kun je een klein voorbeeldje geven, zodat ik het principe snap?


Ik begreep de hele tijd al wat je bedoelde, echter vraag je iets te veel en probeer je iets te weinig naar mijn mening.

De fix die je doet is het toevoegen van de namespace Model, Controller en Library. OF je prefixt al je classes met model_core_user, controller_home_homecontroller, library_xml_loader. Namespaces is nieuwer, beter en duidelijker, dus ik zou voor die optie gaan. Dan heb je die 3 folders, Model, Controller en Library. Je autoloader stop je dan in dezelfde directory als die 3 folders, met dit erin

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
spl_autoload_register(function($clazz) {
    $file = __DIR__ . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $clazz) .'.php';
    if (file_exists($file))
        require $file;
});
?>


En klaar, al je files worden autoloaded zonder enige vorm van "opzoeken".

Natuurlijk wil je later je folders op een andere plek neerzetten, dat is het moment dat je namespace => directory array's wil toevoegen, en een autoloader class wil maken. Maar zorg eerst dat je de basis begrijpt
Gewijzigd op 05/10/2013 17:37:31 door NOLot -
 

Pagina: 1 2 volgende »



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.