autoloading psr-0 psr-4

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

Ervaren PHP developer gezocht!

Functie Het team bestaat inmiddels uit zo’n 25 collega’s met specialisten op het gebied van development, data(analyse), marketing, infrastructuur en finance. Ze hebben een supermodern pand en bieden hiernaast veel vrijheid en verantwoordelijkheid. Ze doen er alles aan om jou op te gemak te stellen. Zo kun je je eigen werkplek inrichten naar persoonlijke wensen, maar gaan ze bijvoorbeeld ook jaarlijks met elkaar wintersporten en zijn er andere leuke uitjes. Als onderdeel van één van de scrumteams ga je aan de slag, samen ben je medeverantwoordelijk voor het doorontwikkelen van hun business applicatie waar het traffic team dagelijks mee werkt.

Bekijk vacature »

Senior Front-end Developer

Dit ga je doen Met behulp van diverse programmeertalen ontwikkelen van Front-end software; Het begeleiden van het front-end team; Het oplossen van incidenten; Het bijhouden van een backlog; Je hebt een actieve bijdrage in de wekelijkse overleggen met de omliggende teams; Je houdt trends bij en adviseert het management hierover waar nodig; Helder communiceren met de stakeholders om hen zo mee te nemen in projecten en laten inzien wat de duur en toegevoegde waarde van bepaalde projecten is. Hier ga je werken Deze organisatie heeft circa 40 miljoen bezoekers per maand en heeft innovatie hoog in het vaandel staan. Het

Bekijk vacature »

.NET Developer

Functie omschrijving In deze functie ga je werken als C# Developer. Jij gaat aan de slag met de volgende taken: Maatwerk software bouwen; Huidige softwareprojecten verder uitbouwen en optimaliseren; Ideeën van de klant omzetten naar handige oplossingen en tools; Bovenstaande doe je middels de Microsoft- stack: C#, ASP.NET en MVC/ Entity Framework. Ben je net afgestudeerd aan een HBO opleiding Informatica, aarzel dan niet om te solliciteren. Dit is namelijk de ideale startersfunctie! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van websites. Dit is door

Bekijk vacature »

Junior .NET developer

Functie Om half 9 kom jij binnen en pak jij als eerst natuurlijk een bakje koffie of thee. Vervolgens ga jij je voorbereiden op de stand-up van kwart voor 9. Zijn er bijvoorbeeld dingen waar jij nog tegen aan loopt? Of is er nog code die getest of gereviewd moet worden? Vervolgens starten jullie met de stand up en na de stand up zoeken jullie elkaar op en gaan jullie aan de slag. Als team met 6 developers werken jullie in drie wekelijkse sprints. Het einde van een sprint is altijd op een donderdag zodat jullie op vrijdag de demo

Bekijk vacature »

Front-end Developer - Juniorfunctie

Functie omschrijving Ben jij op zoek naar een uitdagende baan als front-end developer, in een informele werksfeer, waar jij echt het verschil kan maken? Wil jij graag werken voor een bedrijf dat sportiviteit en een open communicatie, hoog in het vaandel heeft staan? Dan hebben wij de perfecte vacature voor je! Voor een klein bedrijf in Rijen dat gespecialiseerd is in het omzetten van digitale woningtekeningen naar managementinformatie, zijn wij per direct op zoek naar een allround front-end developer. Jouw werkzaamheden zien er als volgt uit: Ja gaat nauw samenwerken met de back-end developer. De database structuur is volledig gebouwd

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 »

Medior PHP Developer

Bij Getnoticed doen wij wat we leuk vinden, websites bouwen en online marketing. Voor veel van onze klanten doen we dan ook allebei. Wel zo fijn om campagnes te draaien voor conversiegerichte website die in eigen beheer zijn. In onze vestiging in Nederweert zitten onze development afdelingen en worden de websites gebouwd. Op dit moment zijn we op zoek naar jou: dé PHP/Back-end developer die net als wij, het hoofd boven het maaiveld durft uit te steken! In het kort Even een paar punten die omschrijven wat deze toffe baan inhoudt: Het bedenken van nieuwe functionaliteiten Het verbeteren van het

Bekijk vacature »

Implementatie specialist

Standplaats: Honselersdijk Aantal uren: 32 – 40 uur Opleidingsniveau: HBO werk- en denkniveau Ben jij de implementatie expert die onze klanten helpt bij het integreren van de Greencommerce software? Ben jij daarnaast communicatief sterk, denk jij graag in verbeteringen en heb je ervaring met ICT? Lees dan snel verder! Bedrijfsinformatie Jem-id is een grote speler op het gebied van software ontwikkeling. Zo zijn wij continu bezig met het ontwikkelen van de meest innovatieve software voor de AGF- en sierteeltsector. We creëren oplossingen die er toe doen en verbinden klanten niet alleen op technisch vlak, maar zoeken ook de verbinding in

Bekijk vacature »

Experienced Lead Java Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Delft Vacature ID: 13301 Introductie We are seeking a Lead Java Developer for our team in the area of Delft. You will develop an application used exclusively by the engineers and geologists for site characterizations, which imports raw field and laboratory measurements for further processing, integration, ground modelling, and geotechnical analysis and reporting. The client/server application is entirely written in Java, and the server is hosted in the Amazon cloud, utilizing frameworks such as Spring and Hibernate, and connected to an MS SQL Server RDS instance. There is a trend towards using more

Bekijk vacature »

Low Code Developer - Consultant

Functie omschrijving Wil jij fungeren als een spin in het web en samenwerken met klanten? Voor een leuke en interessante opdrachtgever in omgeving Leiden zijn wij op zoek naar een Low Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten en het leiden van projecten. Ben jij toe aan een nieuwe uitdaging en heb jij verstand van datamodellering en NO CODE Platformen? Lees dan snel verder! Bij deze rol horen de volgende werkzaamheden: Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform,

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 »

Python (Django) developer - Remote in The Netherla

Functie Together with your team, consisting of a senior, 2 mediors and one junior developer, you will work on their software in an Agile-based approach. You have an eye for quality, risk, and customer interest. Communication with your colleagues and, where necessary, with customers, plays an important role in achieving a successful result. As a person, you are smart, get things done, and are result-oriented. There is a lot of independence within the development team, apart from the stand-up (10:00 am) and occasional pair-programming sessions. Techniques they use include Python, Django, MySQL, Mercurial, Ubuntu Linux, Nginx. In terms of front-end

Bekijk vacature »

Senior Product Developer

Functieomschrijving Als senior Product Developer ben je verantwoordelijk voor bestaande mobiliteitsproducten en de ontwikkeling van nieuwe mobiliteitsconcepten. Met behulp van diverse klantonderzoeken, klantsessies en salesmeetings zorg je ervoor dat je de veranderende mobiliteitsbehoeften in de markt kent. Hier speel je op in door innovatieve, flexibele, efficiënte en duurzame vervoersoplossingen te bedenken, te ontwikkelen, te implementeren en uiteindelijk samen met Sales en Marketing collega’s in de markt te zetten. Je initieert en neemt deel aan (internationale en afdeling overschrijdende) projecten, vaak in de rol van projectleider. In die rol bewaak je de voortgang, coördineer je de activiteiten en zorg je voor

Bekijk vacature »
Ozzie PHP

Ozzie PHP

07/05/2014 20:56:33
Quote Anchor link
Heej,

Twee vraagjes...

1) Bij een psr-4 autoloader kun je een namespace en een directory toevoegen. Bijv. setNamespace('foo', 'path/to/foo'). Begrijp ik goed dat je aan een psr-0 autoloader alleen maar een pad toevoegt, zonder een namespace?

2) Stel een library laadt volgens het psr-0 autoloading principe, en de top-level namespace van die library is 'foo'. Kun je diezelfde library dan ook laden met een psr-4 autoloader, door dit te doen:
setNamespace('foo', 'path/to/foo') ?
 
PHP hulp

PHP hulp

23/11/2024 19:15:19
 
Dos Moonen

Dos Moonen

07/05/2014 22:06:20
Quote Anchor link
Voor zover ik het begrijp:

1) ja

2) ja
 
Ozzie PHP

Ozzie PHP

07/05/2014 22:08:52
Quote Anchor link
Oké, thanks Dos.
 
Wouter J

Wouter J

07/05/2014 22:36:26
Quote Anchor link
Er zit maar 1 verschil tussen PSR-0 en PSR-4: In PSR-4 wordt de namespace niet opgenomen in het path, in PSR-0 wel.

Dus stel we doen $aPsr0Autoloader->registerNamespace('Ozzie\\Cms', 'src/'); en vragen de Ozzie\Cms\Admin\AdminService interface op, dan wordt deze geladen uit src/Ozzie/Cms/Admin/AdminService.php

Als we echter $aPsr4Autoloader->registerNamespace('Ozzie\\Cms\\', 'src/'); doen dan wordt deze geladen uit src/Admin/AdminService.php.

Op deze manier kun je dus nutteloze mappen verwijderen, die alleen mappen hebben. Dan krijg je bijv. iets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$psr4Autoloader
->registerNamespace(array(
    'Ozzie\\Cms' => 'vendor/ozzie-cms',
    'Ozzie\\Framework\\' => 'vendor/ozzie-framework',
));

?>

En dan kun je klassen als Ozzie\Cms\Admin\AdminService in vendor/ozzie-cms/Admin/AdminService.php vinden en Ozzie\Framework\Routing\Router in vendor/ozzie-framework/Routing/Router.php

Dus ja, deze configuratie is hetzelfde:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$psr0Autoloader
->registerNamespace('Ozzie\\Cms', 'vendor/ozzie-cms');
$psr4Autoloader->registerNamespace('Ozzie\\Cms\\', 'vendor/ozzie-cms/Ozzie/Cms');
?>


Merk overigens op dat PSR-4 een successor van PSR-0 is, het is een vervanger. PSR-0 is nu dus "deprecated".
Gewijzigd op 07/05/2014 22:37:25 door Wouter J
 
Ozzie PHP

Ozzie PHP

07/05/2014 22:46:36
Quote Anchor link
Thanks Wouter. Ik dacht dus eigenlijk dat je bij psr-0 enkel een path instelde, zonder nameaspace.

$prs0Autoloader->setPath('library');

En dat dan \foo\bar zou geladen worden worden via 'library/foo/bar.php' maar dat heb ik dus verkeerd begrepen.

>> Merk overigens op dat PSR-4 een successor van PSR-0 is, het is een vervanger. PSR-0 is nu dus "deprecated".

Oké... dus als er een library is die met PSR-0 werkt, dan kun je die gewoon prima autoloaden via een PSR-4 autoloader. Correct?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$psr0Autoloader
->registerNamespace('Ozzie\\Cms', 'vendor/ozzie-cms');
$psr4Autoloader->registerNamespace('Ozzie\\Cms\\', 'vendor/ozzie-cms/Ozzie/Cms');
?>

Waarom zet je bij de psr-4 autoloader een slach achter de namespace en bij de psr-0 autoloader niet?
 
Dos Moonen

Dos Moonen

07/05/2014 23:20:41
Quote Anchor link
Na PSR-0 en PSR-4 weer een keer doorgenomen te hebben:

"Er zit maar 1 verschil tussen PSR-0 en PSR-4: In PSR-4 wordt de namespace niet opgenomen in het path, in PSR-0 wel."
Er is nog een verschil:
- PSR-0 zegt "Each _ character in the CLASS NAME is converted to a DIRECTORY_SEPARATOR. The _ character has no special meaning in the namespace."
- PSR-4 zegt "Underscores have no special meaning in any portion of the fully qualified class name."

Hieruit volgt dat het antwoord op de vraag
"Oké... dus als er een library is die met PSR-0 werkt, dan kun je die gewoon prima autoloaden via een PSR-4 autoloader. Correct?"
nee is. Niet 100% van de gevallen in elk geval. Doe het dus ook niet.

PS. "In PSR-4 wordt de namespace prefix niet opgenomen in het path, in PSR-0 is er geen prefix die je weg kunt laten." misschien ietsjes duidelijker?
Gewijzigd op 07/05/2014 23:32:59 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

07/05/2014 23:34:29
Quote Anchor link
Ah oké. Er zit dus toch verschil tussen! Ik heb zelf een keer een psr-4 autoloader gemaakt, en daarin vervang ik de underscore in een classnaam door een slash. Dat klopt dus helemaal niet :-s
Maar wel vreemd... waarom heb ik dat dan ooit erin gebouwd vraag ik me af. Verkeerd gekeken bij de specs van psr-0? Vreemd...

>> PS. "In PSR-4 wordt de namespace prefix niet opgenomen in het path, in PSR-0 is er geen prefix die je weg kunt laten." misschien ietsjes duidelijker?

"In PSR-4 wordt de namespace prefix niet opgenomen in het path"

Dit is duidelijk.

"in PSR-0 is er geen prefix die je weg kunt laten."

Dit is me niet duidelijk. :-s
Heb je een voorbeeldje?
 
Dos Moonen

Dos Moonen

08/05/2014 08:44:40
Quote Anchor link
PSR-0:
Je geeft een path op.
De autoloader vervangt alle namespace separators en underscores in de class name door DIRECTORY_SEPARATOR.
Vervolgent plakt de autoloader het achter het path en probeert het dat .php bestand te laden.

PSR-4:
Je geeft een path en namespace prefix op.
De autoloader returned als de FQN niet begint met de namespace prefix.
De autoloader haalt de prefix van de FQN af.
De autoloader vervangt in het restant alle namespace separators door DIRECTORY_SEPARATOR.
Vervolgent plakt de autoloader het achter het path en probeert het dat .php bestand te laden.
Gewijzigd op 08/05/2014 09:23:11 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

08/05/2014 11:29:36
Quote Anchor link
Dos thanks, hoe jij het uitlegt zo begreep ik het ook, maar Wouter schrijft hierboven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$psr0Autoloader
->registerNamespace('Ozzie\\Cms', 'vendor/ozzie-cms');
?>

Wouter koppelt bij de PSR-0 autoloader wél een namespace aan het pad. Dat klopt dan dus niet?

>> De autoloader returned als de FQN niet begint met de namespace prefix.

Als ie niet returnet, maar simpelweg niks doet, dan is het toch ook goed? Komt op hetzelfde neer neem ik aan?
 
Dos Moonen

Dos Moonen

08/05/2014 13:33:38
Quote Anchor link
"Wouter koppelt bij de PSR-0 autoloader wél een namespace aan het pad. Dat klopt dan dus niet?"
Dan heeft hij toen hij dat schreef, net als ik toen mijn eerste post in dit topic schreef, PSR-0 en PSR-4 niet recent nog eens doorgenomen had.

"Als ie niet returnet, maar simpelweg niks doet, dan is het toch ook goed? Komt op hetzelfde neer neem ik aan?"
Ja, persoonlijk ben ik het liefst zo snel mogelijk uit een functie/methode. Maar er is ook de single point of exit gedachten gang die handig is bij talen waar je zelf memory management moet uitvoeren. PHP doet dat voor je, dus return ik het liefst zo snel mogelijk.
 
Ozzie PHP

Ozzie PHP

08/05/2014 13:39:03
Quote Anchor link
>> Ja, persoonlijk ben ik het liefst zo snel mogelijk uit een functie/methode.

Wat ik bedoel is... je kunt dit doen (wat jij waarschijnlijk doet)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if ($namespace_klopt_niet) {
  return;
}

// class laden
?>

Maar je kunt ook dit doen (zoals ik het doe)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if ($namespace klopt) {
  // class laden
}
?>

Jij returnt dus als niet aan de voorwaarde wordt voldaan. Ik doe alleen iets als wél aan de voorwaarde wordt voldaan en return nooit iets. Vooral een kwestie van persoonlijke voorkeur?
 
Dos Moonen

Dos Moonen

08/05/2014 13:58:04
Quote Anchor link
"Vooral een kwestie van persoonlijke voorkeur?"
Ja.
 
Ozzie PHP

Ozzie PHP

08/05/2014 13:59:26
Quote Anchor link
Oké :-)

Toevoeging op 08/05/2014 14:30:21:

Toch nog even een vraag...

Je kan dan toch ook een psr-0 loader maken waar je wel een namespace aan kan toevoegen?

Dus stel je hebt een PDF library volgens psr-0. Dan zou (correct me if I'm wrong) toch iedere class-naam met dezelfde namespace moeten beginnen? Bijv. PDF? Dan zou ik toch ook een eigen psr-0 autoloader kunnen maken waarbij bijv. de top level namespace verwijst naar de library? Of werkt dat niet?
 



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.