autoloader

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.Net ontwikkelaar - Het schoolsysteem verbeteren!

Bedrijfsomschrijving Onze klant is een prettige en kleinschalige organisatie waar hard gewerkt wordt om het onderwijs te verbeteren. Daarom werken ze aan complexe om administratieve, financiële en facilitaire processen te versnellen en te verbeteren. Dit doen ze vanuit een platte organisatie voor klanten die door geheel Nederland verspreid zitten, hier horen vanzelfsprekend een aantal aansprekende HBO scholen en universiteiten toe. Functieomschrijving Je komt terecht in een organisatie waar op dit moment 2 scrumteams werken. Jij zal als .Net developer binnen 1 van deze scrumteams functioneren, iedereen binnen dit team heeft zijn/haar eigen expertise waardoor er met verschillende invalshoeken aan een

Bekijk vacature »

Developer Front-end

Functie omschrijving Front-end Developer gezocht! Wij zijn op zoek naar een front-end developer voor een organisatie in de regio Veenendaal die de eindverantwoordelijkheid op zich neemt van alles wat met design te maken heeft. Je hebt in deze functie een adviserende rol hiervoor moet je beschikken over een grote dosis vakinhoudelijke kennis. Je creëert unieke concepten door samen met collega’s en klanten te overleggen over aangeleverde designs. Hiermee draag jij je steentje bij aan de groeiambities van de klant. Jij wordt het vaste aanspreekpunt voor klanten wanneer het gaat over planningen, hierin is het jouw taak om alle betrokkenen goed

Bekijk vacature »

Front-End React Developer

Als Front-End React Developer verbeter je de user experience van onze eigen webapplicaties voor onze collega's binnen Coolblue. Wat doe je als Front-End React Developer bij Coolblue? Als Front-end React Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten met React.js. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Daarnaast ben je trots op je werk en verwelkomt alle feedback. Ook Front-end React Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Verbeteren van de gebruiksvriendelijkheid van onze webshop

Bekijk vacature »

Ervaren C#.NET programmeur

Functieomschrijving Voor een moderne werkgever in regio Prinsenbeek zijn wij op zoek naar een ervaren C#.NET programmeur die graag de uitdaging aangaat. Je houdt je bezig met het ontwikkelen van maatwerk webapplicaties voor diverse klanten, waarbij complexe processen optimaal worden ondersteund. Verder ziet jouw takenpakket er als volgt uit: Ontwikkelen en onderhouden van C#.NET-applicaties; Schrijven van hoogwaardige, herbruikbare codes; Schrijven van technische documentatie en gebruikershandleidingen; Bijdragen aan het ontwerp en de architectuur van softwaretoepassingen; Troubleshooten en oplossen van bugs in softwaretoepassingen; Werken met databases en dataopslagoplossingen; Implementeren van beveiligingsoplossingen en het waarborgen van de beveiliging van applicaties en gegevens. Bedrijfsprofiel

Bekijk vacature »

Software Developer C# - Deventer

Software Developer C# – Deventer Bijdragen aan de toekomst van het onderwijs! Ben jij op zoek naar een dynamische omgeving waar vol enthousiasme wordt gewerkt aan software voor interactieve dashboard- en analysetoepassingen ter verbetering van het onderwijs? Dan zijn wij het bedrijf voor jou! TIG is een bedrijf met een informele en ondernemende werksfeer, waarbij goede ideeën snel leiden tot concrete acties. Wij zijn een software ontwikkelorganisatie en focussen ons op het ontwikkelen en implementeren van oplossingen voor het leveren van managementinformatie, datavisualisatie en analyses voor het onderwijs. Met onze dashboard- en analyseoplossingen zetten scholen gegevens om naar betekenisvolle informatie.

Bekijk vacature »

Ambitieuze medior developer

Wat je gaat doen: Heb jij al een paar jaar ervaring als developer maar wil jij naar the next level? In ons NextLevelDev Programma helpen wij jou om de volgende stap te zetten: een mooi programma aan trainingen op het gebied van Java, hippe frameworks, Agile/Scrum, OCP-certificering en optioneel: andere JVM-talen als Kotlin en Scala; Cloud (AWS, Azure, GCP) Soc Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun

Bekijk vacature »

Software Developer C# .NET

Functie omschrijving Zoek jij een nieuwe uitdaging binnen development waar je komt te werken binnen een flexibel, jong en ondernemend bedrijf? Wij zijn voor deze functie op zoek naar een C# .NET Developer die enthousiast wordt van het aansluiten en begeleiden van (complexe) nieuwe klanten. Verder begeleid je complexe projecten, ben jij iemand die altijd kansen ziet? Dan zoeken wij jou! Verder ga jij je bezighouden met: Het verbeteren van functionaliteiten binnen het dataplatform; Meedenken in oplossingsrichtingen; Werken aan de architectuur; Ontwikkelen van nieuwe technologieën. Bedrijfsprofiel Waar ga je werken? De organisatie waar je voor gaat werken heeft een onafhankelijk

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 »

Junior .NET Developer

Dit ga je doen Ontwikkelprocessen verder optimaliseren en verder ontwikkelen met C#; CI/CD-pipelines automatiseren; Ontwikkelen van herbruikbare componenten; Front-end pagina's gebruiksvriendelijk maken. Hier ga je werken Als junior .NET Developer kom je terecht binnen een grote en internationale organisatie. Zij streven naar een positieve impact op de mens, milieu en maatschappij. Het bedrijf is oorspronkelijk een familiebedrijf en werkt aan de productie van hoogwaardige en technische systemen voor de gezondheidszorg. Momenteel willen zij betere ontwikkelprocessen creëren op internationaal gebied en staat kwaliteit en veiligheid voor hun op nummer 1! Als junior .NET Developer werk je aan het ontwikkelen van verbeterde

Bekijk vacature »

SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 13382 Introductie We is looking for a HANA Developer to work for our client. The candidate has to have an experience in building Data Intensive Applications (DIA’s). The role of a HANA Developer at ASML involves working on building Data Intensive Applications in an industrial/enterprise environment. The primary responsibility is to handle data from various sources and determine the best way to structure it for use by data analysts, who will run queries and algorithms against it for predictive and prescriptive analytics through machine learning. Wat verwachten we van jou?

Bekijk vacature »

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Front-end developer Consultancy in teamverband wer

Functie Het team bestaat uit User Experience designers, Data Scientists en Software Engineers. Momenteel zijn ze op zoek naar een ervaren Front-end of Fullstack developer die samen met de consultants aan de slag gaat om de business requirements te vertalen naar technische oplossingen. Los van het finetunen van extenties, help je bij het configureren van bijvoorbeeld een mobiel bankieren app. Hierin ben je van A tot Z betrokken en zie je bijvoorbeeld ook toe op de uitvoering van testen. Je expertise wordt optimaal benut en je krijgt verschillende kansen om deze uit te breiden door met verschillende innovatieve technologieën aan

Bekijk vacature »

Magento developer

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

Robot Programmeur

In het kort Drie redenen waarom deze vacature uniek is! Programmeren van zelflerende robots Werken op kantoor en testen in de bedrijfshal Je krijgt verantwoordelijkheid, vrijheid en je mag werken naar eigen inzicht De organisatie Hier ga je aan de slag Een bedrijf dat innovatieve robottoepassingen ontwerpt en bouwt voor onder andere de staal industrie, energie- bouw- en agrarische sector. De robots die vaak in combinatie met diverse randapparatuur geleverd worden vormen een totaaloplossing voor de klant. Dit zijn klanten over de hele wereld, van België en Duitsland tot China, India, maar ook in Nederland. Projecten waar momenteel aan wordt

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Pagina: « vorige 1 2

Ozzie PHP

Ozzie PHP

05/10/2013 17:44:23
Quote Anchor link
Hoe ik de autoload functie moet maken daar kom ik wel uit, maar wat verandert er dan concreet aan de classes zelf, en hoe roep ik een nieuwe class aan?

Nu doe ik dit:

$xml_reader = new library_xml_reader();

Hoe ziet dit er dan uit als ik namespaces gebruik? En blijft de class-naam wel gewoon "library_xml_reader", of verandert daar ook iets aan?
 
PHP hulp

PHP hulp

03/01/2025 06:43:10
 
NOLot -

NOLot -

05/10/2013 17:54:37
Quote Anchor link
Wat heb je al geprobeerd? Heb je al een file aangemaakt reader.php in de folder library/xml met als classname library_xml_reader? Wat gaf je autoloader voor error? Hoe ziet je autoloader eruit qua code? Staat je autoloader in de goede directory?

Met namespaces ziet het zo eruit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
namespace Library\Xml;

class Reader {}
?>


Zonder namespaces zo

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
class Library_Xml_Reader {}
?>


Allebei als filename library/xml/reader.php
 
Ozzie PHP

Ozzie PHP

05/10/2013 18:09:24
Quote Anchor link
Thanks NOLot. Ik heb heel lang geleden geprobeerd met namespaces te werken, alleen toen ging m'n editor over de flos, dus vandaar dat ik er niet zo heel happig op ben.

Ik hoop dat je deze vragen nog kunt beantwoorden:

1) Boven de class zet jij "namespace Library\Xml;" Dit is dus eigenlijk gewoon de directory waar de class in staat?
2) Als ik namespaces gebruik, hoe roep ik dan een class aan? $reader = new Library\Xml\Reader ?
3) Wat is nu precies het voordeel van namespaces ten opzichte van underscores?
 
Dos Moonen

Dos Moonen

05/10/2013 19:20:47
Quote Anchor link
1) Je kan een namespace vergelijken met een directory, ja. Het is een nettere manier om classes met de zelfde naam te voorkomen dan underscores.
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
<?php
namespace A {

  class X { ... }
  class Y { ... }
  class Z { ... }

  var_dump(X::class, Y::class, Z::class);
  // output:
  // string(3) "A\X"
  // string(3) "A\Y"
  // string(3) "A\Z"

}

namespace B {

  class X { ... }
  class Y { ... }
  class Z { ... }

  var_dump(X::class, Y::ckass, Z::class);
  // output:
  // string(3) "B\X"
  // string(3) "B\Y"
  // string(3) "B\Z"

}

// Buiten de namespace A zullen we dit moeten doen om de zelfde output te krijgen.
// var_dump(A\X::class, A\Y::class, A\Z::class);
// var_dump(B\X::class, B\Y::class, B\Z::class);


?>


2) Dat is optie een, optie twee is use Library\Xml\Reader as Reader; $reader = new Reader;
wat ook nog kan is use Library\Xml; $reader = new Xml\Reader;

3) Het voordeel is wanneer binnen een namespace werkt of je het 'use' gebruikt om een namespace te importeren.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$internal
= new MyFrameworkName\MVC\Request\Client\Internal;
$client = new MyFrameworkName\MVC\Request\Client($internal);
?>

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

use MyframeworkName\MVC\Request\Client;

$interal = new Client\Internal;
$client = new Client($internal);
?>
Gewijzigd op 05/10/2013 19:22:22 door Dos Moonen
 
Wouter J

Wouter J

05/10/2013 19:23:28
Quote Anchor link
1) Nee, dit is de namespace. Indirect gebruikt de autoloader dit om de directory te krijgen van de klasse, maar het is de namespace. We zitten nu dus in de Library\Xml namespace en we hebben een klasse Reader.

2) Ja, zo roep je hem aan. Of mooier, met het gebruik van aliasing:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
use Library\Xml\Reader as XmlReader; // klasse Reader van namespace Library\Xml heeft nu de alias XmlReader gekregen in dit document

$reader = new XmlReader();
?>


3) De voordelen:
- Namespace scope. Variabelen en klassen bestaan alleen in die namespace en niet in anderen. Dat betekend dat je geen problemen hebt met 2 dezelfde classnamen.
- Simpel aan te passen. Stel de klasse wordt ineens Wj\Xml\Reader, dan hoeven we maar 1 use statement aan te passen en alle klassen zijn geupdate!
- Minder schrijfwerk. Geef toe, 3x Library_Xml_Reader schrijven of 1 keer Libary\Xml\Reader schrijven en vervolgens alleen Reader, wat is sneller?
- Zie ook http://net.tutsplus.com/tutorials/php/namespacing-in-php-2/

Edit:

Quote:
Zo bedoel je? (en is dit dan wat je noemt namespacing?)

Nee, nogmaals. Het noemen van xml_reader is al namespacing, aangezien je al de klasse reader in de xml namespace 'stopt'. De berichten op pagina 1 zijn een beetje verwarrend, aangezien de mensen daar praatte over namespacing als ze bedoelde het maken van een root namespace: Library

Vanaf PHP5.3 bevat PHP ook nog namespace support en dat is wat we in pagina 2 en wat in de algehele PHP wereld wordt bedoelt als men over namespacing praat.
Gewijzigd op 05/10/2013 19:26:23 door Wouter J
 
Ozzie PHP

Ozzie PHP

05/10/2013 19:48:21
Quote Anchor link
Dank heren! Ik vind het nog wel een beetje ingewikkeld allemaal.

Even een paar dingen...

NOLot schrijft boven een class "namespace Library\Xml;" terwijl DOS "namespace A {" schrijft. Het verschil wat ik zie is de accolade. Ik werk met losse classes. Dus 1 class per bestand. Begrijp ik goed dat je dan de versie van NOLot gebruikt (zonder accolades) en dat je accolades gebruikt wanneer je er meerdere classes tussenzet?

Dus als ik het goed begrijp moet ik boven iedere class de namespace aangeven (die in principe overeenkomt met de directory). En als ik dan een class nodig heb, dan moet ik eerst use [namespace] doen, en vervolgens kan ik dan pas de class gebruiken.

Oké. Maar hoe pas ik dit verhaal dan weer in een autoloader toe? Want een autoloader krijgt alleen de class-naam binnen. Hoe weet die dan weer om welke namespace het gaat?

En om het nog leuker te maken, als je een service-container gebruikt, dan moet je dus ook aangeven wat de namespace is. Dan kun je geen use gebruiken, dus wordt het alsnog library\xml\reader neem ik aan?

Pfff... lastig!
 
NOLot -

NOLot -

05/10/2013 19:55:39
Quote Anchor link
Ozzie PHP op 05/10/2013 19:48:21:
En om het nog leuker te maken, als je een service-container gebruikt, dan moet je dus ook aangeven wat de namespace is. Dan kun je geen use gebruiken, dus wordt het alsnog library\xml\reader neem ik aan?

Pfff... lastig!


Hoe kun je nou uberhaupt gaan nadenken over het gebruiken van een service-container als je nog niet eens begrijpt wat namespaces zijn en doen???

Als je maar 1 class per file schrijft kan je gewoon namespace X; doen, dan krijgt elke class in je file die namespace.

Ozzie PHP op 05/10/2013 19:48:21:
Dus als ik het goed begrijp moet ik boven iedere class de namespace aangeven (die in principe overeenkomt met de directory). En als ik dan een class nodig heb, dan moet ik eerst use [namespace] doen, en vervolgens kan ik dan pas de class gebruiken.


Heb je dit al geprobeerd te testen? Open je editor en test!

Ozzie PHP op 05/10/2013 19:48:21:
Oké. Maar hoe pas ik dit verhaal dan weer in een autoloader toe? Want een autoloader krijgt alleen de class-naam binnen. Hoe weet die dan weer om welke namespace het gaat?


Open je editor, en schrijf dit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
spl_autoload_register(function($clazz) { var_dump($clazz); });

Probeer dan een paar classes aan te roepen, en kijk wat voor waarden je krijgt
 
Wouter J

Wouter J

05/10/2013 19:57:09
Quote Anchor link
>> Begrijp ik goed dat je dan de versie van NOLot gebruikt (zonder accolades) en dat je accolades gebruikt wanneer je er meerdere classes tussenzet?

Beide notaties kunnen, je kunt ze niet mixen in 1 bestand. In het algemeen gebruik je altijd de versie zonder accolades, behalve als je meerdere namespaces in 1 bestand zet, dan gebruik je de versie met accolades. In dat geval is alleen alles binnen de accolades in die namespace, in het eerste geval (zonder accolades) is alles eronder in die namespace.


>> Dus als ik het goed begrijp moet ik boven iedere class de namespace aangeven (die in principe overeenkomt met de directory). En als ik dan een class nodig heb, dan moet ik eerst use [namespace] doen, en vervolgens kan ik dan pas de class gebruiken.

Ja, dat begrijp je goed. Al kun je ook gewoon direct new \Library\Xml\Reader() doen (merk de eerste \ op, dit zorgt ervoor dat we vanuit de global (root) namespace werken en niet vanuit de huidige namespace).


>> Oké. Maar hoe pas ik dit verhaal dan weer in een autoloader toe? Want een autoloader krijgt alleen de class-naam binnen. Hoe weet die dan weer om welke namespace het gaat?

PHP developers zijn niet dom, de autoloader krijg de FQCN (fully qualified class name) mee, oftewel het volledige namespace + de naam van de class.


>> Dan kun je geen use gebruiken, dus wordt het alsnog library\xml\reader neem ik aan?

Exact!
 
Ozzie PHP

Ozzie PHP

05/10/2013 23:34:58
Quote Anchor link
NOLot - op 05/10/2013 19:55:39:
Hoe kun je nou uberhaupt gaan nadenken over het gebruiken van een service-container als je nog niet eens begrijpt wat namespaces zijn en doen???

Ik heb al eerder een service-container gemaakt hoor.

@Wouter. Thanks!

"Al kun je ook gewoon direct new \Library\Xml\Reader() doen (merk de eerste \ op, dit zorgt ervoor dat we vanuit de global (root) namespace werken en niet vanuit de huidige namespace)."

Wat me opvalt, is dat ongeacht of ik zeg $foo = new \library\foo of $foo = new library\foo dat de class-naam in de autoloader "library\foo" is, dus telkens zonder slash.

En wat ik ook raar vind... stel ik zet class Foo in de root van de library, en boven de class zet ik "namespace library;". Nu is het volgende het geval:

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
<?php

use library;

$foo = new Foo();

// werkt niet

use library\foo;

$foo = new Foo();

// werkt wel

?>

Waarom is het niet voldoende om "use library" te zeggen? En waarom moet ik daar de class-naam foo aan toe voegen?

Oh ja, Wouter, als ik dan de class-naam binnenkrijg, is het dan de bedoeling dat ik die explode op een backward slash en dat ik dan het eerste element van de array pak, en aan de hand daarvan de juiste directory bepaal?
Gewijzigd op 05/10/2013 23:37:27 door Ozzie PHP
 
- Raoul -

- Raoul -

06/10/2013 08:51:07
Quote Anchor link
Je kan niet zomaar heel je library usen. Je mag enkel inladen wat je op dat moment nodig hebt.
 
NOLot -

NOLot -

06/10/2013 08:55:50
Quote Anchor link
Je probeert echt niks zelf ofwat? xD Het lijkt mij onmogelijk dat je in staat bent een service container te kunnen maken zonder dat je begrijpt wat namespaces (of excepties) zijn. Het is alsof je probeer te leren rennen voordat je kan lopen.

Waarom moet je new typen om een nieuw object aan te maken? Waarom moet je $ gebruiken voor variablen? Waarom moet je $this-> gebruiken als je een class instantie wil gebruiken? Omdat de php developers dat zo gemaakt hebben. Overigens als je use library; doet, en dan denkt dat als je new Foo() doet hij automatisch library\foo pakt, dat klinkt me totaal niet logisch in de oren. Wat nou als je dit doet?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
use library;
use model;
use controller;

new foo(); // welke foo?
 
Wouter J

Wouter J

06/10/2013 09:04:55
Quote Anchor link
Quote:
Oh ja, Wouter, als ik dan de class-naam binnenkrijg, is het dan de bedoeling dat ik die explode op een backward slash en dat ik dan het eerste element van de array pak, en aan de hand daarvan de juiste directory bepaal?

Het lijkt mij wel aardig als je eens gaat zoeken op bepaalde termen die hier al regelmatig voorbij zijn gekomen en als je dan even die documentjes leest. Het is altijd leuk als de topic starter ook wat inzet toont...

Dus:
1) Ga naar google en zoek op php psr-0
2) De eerste link lijkt al de goede te zijn, klik daar dus op
3) Lees het document volledig door van boven naar beneden
4) Kopieer eventueel de gegeven autoloader in je project
5) Klaar is kees!
6) Nu nog namespaces leren
7) Zoek daarvoor op php namespace
8) Al die php.net troep is te onduidelijk, maar de 3e link is gelukkig van het geweldige nettuts+
9) Klik op de 3e link
10) Lees ook dit artikel zorgvuldig van boven naar beneden
11) Heb je het nu door? Dan ga je wel naar php.net: language.namespaces
12) Heb je het nu niet door? Dan ga je terug naar de zoekresultaten en pak je het volgende artikel (doe maar die van daylerees.com)
13) Ga nu lekker wat spelen met een projectje met namepaces
14) Heb je het nog steeds niet door? Dan ga je naar phphulp.nl en stel je je vragen.
 
Ozzie PHP

Ozzie PHP

06/10/2013 13:10:23
Quote Anchor link
@NOLot: ik had het use concept verkeerd begrepen. Inmiddels een fatsoenlijke tutorial gevonden die het een stuk beter uitlegt dan de tutorials die ik tot nog toe had gevonden. Dus het principe begint me een stuk duidelijker te worden.

@Wouter: lol. Die tutorial van Dayle Rees had ik trouwens (ook) gelezen en die was gelukkig duidelijk. Op het moment dat ik een class heb met bijv. namespace Ozzie\library\foo en ik wil binnen die class een exception gooien, dan moet ik die dus vanuit de global space gooien middels throw new \Exception(), en als het een eigen exception betreft, dan wordt het bijv. throw new \Ozzie\library\Exception\Input(). Correct?

Wat betreft psr-o lees ik dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
\Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
\Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
\Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php

Hier wordt er vanuit gegaan dat alle classes in 1 en dezelfde library staan, namelijk "/path/to/project/lib/". Maar wat nu als je models en controllers ergens anders staan (bijvoorbeeld in een module). Hoe doe je dat dan met autoloading? Per class aangeven of het om een library class (new Ozzie\library\foo) gaat of om een controller of model (new Ozzie\controller\foo of new Ozzie\model\foo). En dan in de autoloader bepalen aan de hand van de class-naam welk path moet worden gebruikt? Is dat de handigste manier, of is er nog een andere optie?

Toevoeging op 06/10/2013 13:40:50:

Oh, nog iets wat ik tegenkom...

In 1 document werkt dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
namespace foo;

// code...

namespace bar;

// code...

Maar kan ik nu ook nog terug naar de global namespace? Ergens las ik dat als ik de namespace leeglaat "namespace;" dat je dan naar de global namespace gaat, maar dat levert bij mij een parse error op.
Gewijzigd op 06/10/2013 13:20:59 door Ozzie PHP
 
Wouter J

Wouter J

06/10/2013 13:54:44
Quote Anchor link
Als je een globale namespace wilt gebruik je \classnaam
Gewijzigd op 06/10/2013 13:55:43 door Wouter J
 
Ozzie PHP

Ozzie PHP

06/10/2013 13:59:38
Quote Anchor link
Oké, dat had je inderdaad al verteld. Als ik je dus goed begrijp, kun je zodra je een namespace instelt "namespace foo;" niet meer terug naar de global namespace? En klopt mijn beredenering wat betreft het autoloaden?
 
Wouter J

Wouter J

06/10/2013 14:03:28
Quote Anchor link
Quote:
Op het moment dat ik een class heb met bijv. namespace Ozzie\library\foo en ik wil binnen die class een exception gooien, dan moet ik die dus vanuit de global space gooien middels throw new \Exception(), en als het een eigen exception betreft, dan wordt het bijv. throw new \Ozzie\library\Exception\Input(). Correct?

Ja, correct. Behalve dat ik dus use statements zou gebruiken... :)

Quote:
Maar wat nu als je models en controllers ergens anders staan (bijvoorbeeld in een module). Hoe doe je dat dan met autoloading? Per class aangeven of het om een library class (new Ozzie\library\foo) gaat of om een controller of model (new Ozzie\controller\foo of new Ozzie\model\foo). En dan in de autoloader bepalen aan de hand van de class-naam welk path moet worden gebruikt? Is dat de handigste manier, of is er nog een andere optie?

Ik raad je aan eens te kijken hoe de Symfony PSR-0 classloader dit doet: http://symfony.com/doc/current/components/class_loader/class_loader.html (ook leuk voor jouw zijn performance specifieke class loaders: http://symfony.com/doc/current/components/class_loader/cache_class_loader.html )

Lees ook eens de PSR-4 specificaties (zie voor de stappen om dit te vinden mijn vorige reactie). Deze is specifiek gemaakt voor verschillende packages. Een goed voorbeeld van een PSR-4 class loader is de Composer autoloader.
 
Ozzie PHP

Ozzie PHP

06/10/2013 14:11:37
Quote Anchor link
"Ja, correct. Behalve dat ik dus use statements zou gebruiken... :)"

Ah oke... dat wordt dan zoiets als

use Ozzie\library\Exception as Exception

En als je dan een Exception throwt doe je zoiets:

throw new Exception\Input('ongeldige input');

Zo bedoel je? En waar plaats je zo'n use statement, plaats je die binnen de class zelf, of erboven?

Ah, dat voorbeeld dat jij gaf werkt met prefixes... moet ik eens over nadenken hoe ik dat dan zou moeten implementeren...
 
Wouter J

Wouter J

06/10/2013 14:59:38
Quote Anchor link
Quote:
Zo bedoel je? En waar plaats je zo'n use statement, plaats je die binnen de class zelf, of erboven?

Ja, dat bedoelde ik. Vaak heb je verschillende soorten exception klassen, dus alias je de extension namespace. Vaak heb je echter maar 1 klasse, dan alias je de FQCN.

En waar je die plaatst? In een blok tussen het namespace statement en de class declaratie.
 
Ozzie PHP

Ozzie PHP

06/10/2013 15:02:18
Quote Anchor link
Oké, top. Thanks!
 

Pagina: « vorige 1 2



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.