autoloader

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software Programmeur PHP

Functie Ben jij op zoek naar een nieuwe uitdaging als PHP developer en zoek je een leuke platte organisatie? Lees dan snel verder! Voor een opdrachtgever in omgeving Capelle aan den IJssel dat zich gespecialiseerd heeft in het realiseren van veilige netwerkverbindingen zijn wij op zoek naar een leuke software developer ter versterking van het huidige team. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen PHP, JAVA en Node.js. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn

Bekijk vacature »

Oracle Apex Developer

Dit ga je doen Jouw taken bestaan uit: Het bouwen maatwerk Oracle applicaties voor Europese business units; Het implementeren van de nieuwste technieken om te blijven innoveren; Actief meedenken en aandragen van verbetervoorstellen. Hier ga je werken Deze organisatie in de regio Veenendaal is een van wereld grootste retailers met ruim 16.000 winkels in 27 markten en jaarlijks ruim 5,3 miljard klanten die winkelen bij een van hun welbekende retailmerken. Binnen de organisatie is er een IT Group actief die dient als IT Service Provider voor de hele organisatie en waar dagelijks IT'ers werken aan state-of-the-art IT oplossingen. Dit doen

Bekijk vacature »

OutSystems Developer

Dit ga je doen Het van scratch af aan ontwikkelen van applicaties met OutSystems; Het aanhaken bij diverse projecten binnen de organisatie; Schakelen met de business; Meedenken over de mogelijkheden van het platform binnen de organisatie. Hier ga je werken Deze organisatie is een toonaangevende speler in de vastgoedbranche en telt momenteel ruim 500 medewerkers. Met meer dan 150 applicaties staat er een complex applicatielandschap, bestaande uit standaard- en maatwerkapplicaties. De maatwerkapplicaties worden ontwikkeld door een inhouse development team. Het doel voor de komende periode is het verder vernieuwen en optimaliseren van het huidige applicatielandschap. Zo staat de organisatie aan

Bekijk vacature »

Front-end Developer Magento 2/Wordpress

Voor het aantrekkelijk houden en steeds vernieuwen van de huidige websites en webshops en het meedenken in de marketing zijn wij per direct op zoek naar een ervaren Front-end developer met gedegen kennis van Magento 2 (webshops) en Wordpress (websites). Wat bieden wij jou Mooi salaris! Meteen op contract bij de opdrachtgever! Gezellig, Kempisch bedrijf! 35 uur per week! Auto van de zaak! Wie ben jij Van een front-end developer verwachten wij: Een afgeronde Bachelor ICT opleiding met profiel ICT & Media Design. Dat je in het bezit bent van een Magento 2 professional front-end developer certificaat; Je hebt ruime

Bekijk vacature »

Lead Fullstack developer

Functie omschrijving Ben jij een leergierige en ambitieuze junior developer met technische skills? Ben jij op zoek naar een werkgever die jouw de volledige vrijheid geeft om jezelf tot een volwaardige senior te ontwikkelen? Wij zijn op zoek naar een full stack developer die zich bezig wil bezig houden met het uitbreiden en verbeteren van de online webshop. Een onderdeel van jouw werkzaamheden is naast het beheren van de webshop ook om de processen en structuren te stroomlijnen. Werkzaamheden Onderhouden van de webshop (denk aan het bijhouden van de voorraad); Nieuwe functies toevoegen aan de product configurator door middel van

Bekijk vacature »

Back end developer Digital agency

Functie Heb jij altijd al eens bij een bedrijf willen werken waar jij géén nummertje bent, die alleen maar uitvoerend werk doet? Dan zou je hier perfect passen! Tuurlijk, je werkt aan projecten voor grote of kleine bedrijven… Het enige verschil hier is, jouw mening telt hier écht. Jouw inbreng wordt gewaardeerd, serieus genomen en gebruikt. En vergeet niet, je werkt niet alleen aan deze projecten. Er werken in totaal ruim 20 developers en designers, onderverdeeld over 3 development teams. Voornamelijk bestaande uit Medior en Senior developers, die samen voor een inspirerende en ambitieuze omgeving zorgen. Hun visie is namelijk

Bekijk vacature »

C#.NET-developer - JUNIOR

Functie omschrijving Voor een leuke opdrachtgever in omgeving Brielle zijn wij op zoek naar een junior developer. Werk jij graag met de volgende tools & technieken? C#, .NET, ASP.NET, MVC en SQL? Kijk dan snel of dit iets voor jou is! Als programmeur bij een productiebedrijf zal je voornamelijk nieuwe software schrijven maar ook bestaande software verbeteren. Verder werk je veel samen in back end projecten met leuke collega's. Bedrijfsprofiel Met een team van ruim 130 personen staan ze elke dag weer klaar om IT en Business te combineren door het ontwikkelen van producten op maat. Er zijn 3 teams,

Bekijk vacature »

Ervaren PHP ontwikkelaar

Functie Jij als PHP ontwikkelaar komt te werken in een team van 4 andere PHP ontwikkelaars. Je zult je voornamelijk bezig houden met: – Het ontwikkelen van nieuwe features – Doorontwikkelen van de API – Nadenken over de technische infrastructuur – Datakwaliteit Samen met het team ben jij verantwoordelijk voor de verdere ontwikkeling van de software en om de positie als marktleider in Europa te behouden. Ze werken volgens SCRUM in 2 wekelijkse sprints, werken met Jira voor alle tickets en communiceren veel via Slack. Eisen • Minimaal 3 jaar ervaring als back end developer • Je hebt affiniteit met

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 »

C# ontwikkelaar

Functie omschrijving Werk jij graag met C# en het .NET framework in een leuk familiebedrijf? Lees dan snel verder! Jouw takenpakket hierbij is: Je gaat maatwerk software ontwikkelen en softwareoplossingen creëren. 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. Daarnaast optimaliseer je de bestaande software. Bedrijfsprofiel Deze organisatie is gevestigd in de omgeving van Best en is een echt familiebedrijf. Je komt te werken in een klein team van developers, die zich voornamelijk bezighouden met

Bekijk vacature »

WordPress & Azure Developer

Dit ga je doen Zowel front- als back-end development aan de online website omgeving; Het up-to-date houden van alle WordPress-sites; Koppelingen maken tussen applicaties; Meedenken en adviseren over verbeteringen; Development door middel van WordPress, Javascript, HTML en CSS; Werken binnen Scrum/Agile team. Hier ga je werken Voor een grote overheidsinstelling in Den Haag zijn wij opzoek naar een WordPress developer, met kennis en ervaring op het gebied van Azure. De organisatie zit in een grote transitie waarbij de gehele website/online omgeving vernieuwd zal gaan worden. Binnen dit Scrum/Agile team ben je verantwoordelijk voor deze grote migratie/ombouw van de omgeving. De

Bekijk vacature »

Senior .Net developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als .Net Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling. Mede hierdoor zij wij dit jaar Microsoft Partner of the year geworden. Sogetisten staan klaar voor elkaar, hebben lol met elkaar en daarmee behalen we de mooiste resultaten! Werken bij Sogeti

Bekijk vacature »

Freelance JAVA / C# Developer

Functieomschrijving Ben je een ervaren freelancer of werk je in loondienst en ben je toe aan een nieuwe uitdaging? Lees dan snel verder want wie weet is dit een leuke vacature voor jou! Voor een opdrachtgever in omgeving Delft zijn wij op zoek naar ervaren JAVA of C# Developers die graag op projectbasis willen werken. Je komt terecht bij een informele developers club die mooie projecten uitvoeren voor grote klanten. Het fijne van deze werkgever is dat je zelf mag beslissen hoe je te werk wilt gaan. Wil je als freelancer werken dan is dat OK. Wil je de zekerheid

Bekijk vacature »

Developer Low-code

Dit ga je doen Low-code ontwikkeling van software voor landelijk bekende organisaties; Opleveren van mooie eindproducten, middels de Agile methodiek; Samenwerken in een team van 10 collega's; Direct contact met de eindklant over de gewenste oplossingen. Hier ga je werken Als Developer 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. De

Bekijk vacature »

Software Developer

Bij een bedrijf in de machinebouw, regio Roosendaal, zijn we op zoek naar een: Software Developer Waar ga je werken? Onze opdrachtgever is gespecialiseerd in de grondverzetmachines. Al meer dan 50 jaar leveren ze zowel nationaal als internationaal diverse machines. Het is een familiebedrijf met een informele werksfeer. Wat ga je doen? Als Software Developer je verantwoordelijk voor: - Je werkt voortdurend aan oplossingen voor het op afstand bewaken en besturen van oogstmachines; - Het visualiseren van gegevens in rapporten, apps of andere formaten; - Voorspellend machineonderhoud; - Taakplanning; - Je schrijft aangepaste plug-ins om gegevens te importeren of exporteren

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

12/05/2024 02:39:29
 
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.