autoloader

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C# Developer

Dit ga je doen Je gaat aan de slag in het websites team of portals team waarin je je bezighoudt met concept & design, implementatie en ook een stukje bugfixing en onderhoud; Je werkt met je team volgens de Scrum werkwijze; Zo adviseer je ook de PO & Scrum Master over de technische architectuur, koppelingen en integratie met externe systemen en API’s; Je blijft op de hoogte van de laatste ontwikkelingen en trends op het gebied van C# / .NET en deelt deze kennis binnen de organisatie. Hier ga je werken Onze klant is een internationale organisatie gevestigd in de

Bekijk vacature »

Softwareontwikkelaar Cleopatra

Functieomschrijving: De directie Verkeer en Openbare ruimte van de gemeente Amsterdam beschikt over een softwareapplicatie, "Cleopatra", waarmee geautomatiseerde handhaving plaatsvindt (op basis van kentekenherkenning) van bepaalde gebieden waarin toegangseisen worden gesteld aan het verkeer. Voorbeelden ervan zijn de milieuzones, de zone zwaar verkeer, handhaving van bromen snorfietser op het fietspad en autoluwe gebieden. Voor de doorontwikkeling en uitbreiding ervan zijn gespecialiseerde softwareontwikkelaars nodig die helpen bij het programmeren van de handhavingsmodules voor nieuwe gebieden en het verbeteren en bijwerken van de bestaande onderdelen van de softwareapplicatie.De opdracht bestaat uit: het programmeren van de diverse modules;het tijdens demo's tonen van de

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 »

Junior Front end developer Onderwijssoftware

Functie Als Junior front end developer kom jij terecht in een klein, maar hecht team bestaande uit 5 andere developers (waarvan 2 senioren, 2 medior en 1 junior). Met de gezamenlijke missie om “ieder kind te helpen met onze software” wordt er dagelijks gepassioneerd en hard gewerkt aan ons in-house ontwikkeld platform. Deze software is gebaseerd is op AI, machine Learning en wetenschappelijke inzichten. Dagelijks zul jij werken met onze high traffic webapplicatie. We hebben ruim 300.00 gebruikers en meer dan 2 miljard records waar je te maken mee krijgt! Verder zul jij je bezighouden met: – Het ontwikkelen van

Bekijk vacature »

Junior Developer Low-code

Dit ga je doen Low-code ontwikkeling van software voor landelijk bekende organisaties; Samenwerken in een team van 10 collega's; Opleveren van mooie eindproducten, middels de Agile methodiek; Direct contact met de eindklant over de gewenste oplossingen. Hier ga je werken Als startende IT-professional kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven.

Bekijk vacature »

Software developer

Functieomschrijving Voor een gewaardeerde werkgever in de regio van Middelburg zijn wij op zoek naar een ambitieuze PHP/Symfony Developer. Een enthousiast persoon die het development team komt versterken met het aanpakken van complexe en nieuwe projecten. Ben jij op zoek naar een baan met veel uitdaging binnen een snelgroeiend e-commerce bedrijf, waar je de tijd en ruimte krijgt voor zowel persoonlijke als professionele groei? Lees dan snel verder! Dit ga je doen: Aanpassingssuggesties van collega’s in kaart brengen, vervolgens te analyseren en daarna te concluderen of de aanpassing een verbetering is; Ontwikkeling en beheer van de serviceportal in Symfony en

Bekijk vacature »

Functioneel Applicatiebeheerder

Wij van CNB zijn op zoek naar een leergierige Functioneel Applicatiebeheerder CNB is de grootste dienstverlener in de markt van bloembollen en vaste planten. In deze markt verricht CNB de volgende diensten: bemiddeling, veilen en het koelen en prepareren van bloembollen. Vanuit ons hoofdkantoor in Lisse werken bijna 100 collega’s dag in dag uit aan de bemiddeling van bloembollen. In Bovenkarspel vindt het koelen en prepareren van de bloembollen plaats. Wij zijn op zoek naar een enthousiaste Functioneel Applicatiebeheerder die naast een applicatie, ook sfeer kan bouwen! Jij: Vindt het leuk om binnen een klein IT-team aan de slag te

Bekijk vacature »

Back end developer Python, PHP

Functie Jij als full stack ontwikkelaar zult komen te werken samen met 1 PHP ontwikkelaar een PO en een flexibele schil aan ontwikkelaars . Samen ga je ervoor zorgen dat de huidige producten doorontwikkeld worden. De marketplace is geschreven in PHP Laravel en in de front end React. De roostersoftware is ontwikkeld in Python in combinatie met React in de front end. Jij zult voornamelijk (lees 75%) werken aan de roostersoftware. Momenteel ligt de uitdaging in het feit dat de roostersoftware breder schaalbaar moet worden zodat het voor meerdere flexwerkers ingezet kan worden. Verder willen ze financiële koppelingen gaan maken

Bekijk vacature »

Software Ontwikkelaar

Functie omschrijving Voor een echt familiebedrijf in de omgeving van 's-Hertogenbosch ben ik op zoek naar een Software Developer. Jij gaat in de functie van Software Developer werken met C# en .NET framework Jij gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Daarnaast optimaliseer je de bestaande software. Oplossingen waar de klant echt iets aan heeft, jij krijgt er energie van op dit te realiseren. Je gaat werken in een Microsoft omgeving(ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Bedrijfsprofiel Deze organisatie is

Bekijk vacature »

Senior Front end developer Automotive Angular

Functie Als Senior Front end developer kom je te werken in een team van 11 developers. 9 van de 11 focussen zich op back end, welke is geschreven in Java, en 2 op de front end waarbij er gebruik wordt gemaakt van Typescript en Angular. De focus in deze rol ligt op 2 aspecten; doorontwikkeling van de eigen tooling en gebruik van de tooling t.b.v. klantprojecten. Momenteel zijn ze in de afrondende fase van een project waarbij ze het gehele verkoopproces van nieuwe auto’s anders ingeregeld hebben voor een grote dealer in Nederland. Waarbij Auto’s normaliter pas verkocht werden in

Bekijk vacature »

C# .NET Developer

Functie omschrijving C# .NET Developer gezocht. Ben jij een full stack developer die op zoek is naar een nieuwe uitdaging binnen een leuk snel groeiend bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Developer met ervaring op het gebied van .NET die een organisatie in de regio Bennekom gaat versterken. Jij gaat je binnen dit bedrijf vooral bezighouden met het verbeteren van de functionaliteiten van hun dataplatform. Samen met andere ontwikkelaars denk je mee in oplossingsrichtingen, architectuur en nieuwe technologieën. Bedrijfsprofiel De organisatie waar je voor gaat werken heeft een onafhankelijk dataplatform ontwikkelt voor de agrarische sector.

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 »

Software Developer

Dit ga je doen Ontwikkelen aan de software dat beschikbaar is op de substations; Ontwikkelen in C++, C, Python en JavaScript. Daarnaast op een Embedded Linux omgeving, opgebouwd met containers en DevOps; Meewerken aan cyber security (OWASP); Uitvoeren/bouwen van geautomatiseerde testen in samenwerking met de Quality Specialist; Vertalen van wensen van de klanten/business naar werkbare/duurzame oplossingen. Hier ga je werken Als Software Ontwikkelaar kom je te werken bij een organisatie gericht op de (internationale) energiemarkt, waar wordt gewerkt voor het verwerven en verwerken van realtime, high quality data. Er wordt gewerkt vanuit het hart van de substations en direct voor

Bekijk vacature »

Traineeship IT regio Amsterdam/Utrecht

Wat ga je doen? Het traineeship begint met een fulltime maand cursussen en praktijkdagen, waarin je de basis van het IT-vak leert op de Shared Servicedesk (SSD). Daarnaast ga je meteen aan de slag voor je eerste certificering! (ITILv4). Je start in een groep met 4 tot 10 deelnemers, waarmee jij gedurende die maand optrekt en je kennis kunt delen. Na het voltooien van de eerste maand ga je direct voor een langere periode aan de slag bij één van onze klanten of blijf je intern bij ons op de Shared Servicedesk. Je bent het eerste aanspreekpunt van de eindgebruikers

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 »

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

11/05/2024 20:16:23
 
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.