namespaces

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior .NET developer

Functie Als junior .NET developer start jij in een development team met twee ervaren software ontwikkelaars. Jouw persoonlijke ontwikkeling is voor ons erg belangrijk en jij gaat dan ook meelopen met onze Senior .NET ontwikkelaar die jou met zijn kennis en ervaring een goede begeleiding kan aanbieden. Als team zijn jullie verantwoordelijk voor het schrijven van software voor onze toonaangevende Automatiseringssystemen. Jij gaat aan de slag met de onderhoud van de kernsoftware, ondersteund de software van derden door het gebruik van onze webservices en als team zijn jullie verantwoordelijk voor het ontwikkelen van onze backend oplossingen. Wij maken op dit

Bekijk vacature »

Front End Ontwikkelaar (React)

In het kort Als front end developer ga je aan de slag met maatwerkprojecten voor onze klanten. Denk bijvoorbeeld aan het toevoegen van een machine aan een database of het corrigeren van formulieren voor ingestuurde orders. Voorbeeld van zo’n project is Smart Link. De projecten waar je op ingezet kunt worden liggen binnen het technische domein waar jij als front end developer een grote rol speelt om samen met je back end collega’s de juiste oplossingen te leveren. please note that this particular role requires fluent Dutch language skills. Dit vind je leuk om te doen Het omzetten van designs

Bekijk vacature »

Gezocht: .Net ontwikkelaars met een maatschappelij

Bedrijfsomschrijving Zoek jij als medior .Net ontwikkelaar een inspirerende werkplek bij een bedrijf met maatschappelijk verantwoordelijkheidsgevoel? Dan is deze vacature je op het lijf geschreven. De organisatie bestaat ruim 20 jaar en ze ontwikkelen in house applicaties waarmee de zorgsector enorm mee gebaat is. Jouw applicaties worden gebruikt door duizenden gebruikers waardoor je echt een waardevolle bijdrage kan leveren aan de maatschappij. Het bedrijf is zeer innovatief en vindt een goede werk/privé balans belangrijk. Je krijgt alle mogelijkheden om jezelf verder te ontwikkelen, je werktijden in te delen en daarnaast is het ook mogelijk om deels thuis te werken. Het

Bekijk vacature »

Java Developer

Java Developers opgelet! Bij Luminis zijn ze opzoek naar jou. Lees de vacature en solliciteer direct. Luminis is een software- en technologiebedrijf met meerdere vestigingen. Vanuit deze vestigingen werken 200 professionals aan technisch hoogwaardige oplossingen voor klanten zoals KLM, Nike en Bol.com. Ook ontwikkelt Luminis eigen oplossingen op het gebied van cloud, Internet of Things, data intelligence, e-sports en e-learning. Luminis onderscheidt zich door aantoonbaar voorop te lopen in technologie en innovatie. Luminis heeft drie kernpunten die verankerd zitten in alles wat we doen: het omarmen van nieuwe technologie, meesterschap en kennis delen. Functiebeschrijving First things first! Het is belangrijk

Bekijk vacature »

PHP Programmeur

Functieomschrijving Vanuit het hoofdkantoor in omgeving Breda, ontwikkel je als PHP programmeur niet alleen webapplicaties, maar ben je verder ook gefocust op het constant inspelen op nieuwe innovaties m.b.t software ontwikkeling. Naast het ontwikkelen van webapplicaties, bouwt deze toffe werkgever ook webshops en websites voor hun opdrachtgevers. Wat ga je doen? Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klanten; Het ontwerpen en implementeren van webapplicaties met het Symfony framework; Het schrijven van een schone en efficiënte code volgens het Symfony framework; Onderhouden en updaten van bestaande applicaties die

Bekijk vacature »

Embedded Software Developer Games

Functie omschrijving Heb jij affiniteit met hardware en wil jij kleuren binnen een Qt framework? Spreek jij de talen C en of C ++? Dan ben ik wellicht opzoek naar jou! Voor een super gave opdrachtgever in omgeving Delft is er namelijk plek voor een nieuwe kracht! Dit bedrijf is gespecialiseerd in het ontwerpen van software voor een unieke game industrie. Wil jij betrokken worden bij een proces dat loopt van ontwikkeling tot installatie? Waarbij je bezig zult zijn met perfecte systemen die geleverd worden aan binnen en buitenland? Je zult in een team, samen met vier ontwikkelaars, de mooiste

Bekijk vacature »

C# .NET Developer IoT SQL Server

Samengevat: Wij ontwikkelen innovatieve oplossingen om apparaten en bezittingen op een eenvoudige en flexibele manier te beveiligen. Ben jij een C# .NET developer? Heb jij ervaring met C# en SQL server? Vaste baan: C# .NET Developer IoT HBO €3.200 - €4.500 Deze werkgever is gespecialiseerd in hoogwaardige GSM/GPRS alarm- en telemetrietechnologie. Met een eigen productlijn en klantspecifieke ontwikkelingen biedt deze werkgever oplossingen om op afstand te meten, melden, loggen en aansturen, ook op plaatsen zonder stroomvoorziening. Onze producten worden gekarakteriseerd door flexibiliteit in de configuratie, betrouwbaarheid en een extreem laag stroomverbruik. Zij werken voor MKB klanten. Deze werkgever heeft veel

Bekijk vacature »

IT Infrastructuur Developer

IT Infrastructuur Developer Ben jij (bijna) klaar met je HBO studie in de richting van IT? Opzoek naar een spannende eerste baan, waar je ontzettend veel kan leren? Dan hebben wij de ultieme job voor jou! Voor een goede klant van ons in de financiële dienstverlening zijn wij opzoek naar een Junior Infrastructure Developer. Deze baan is een mooie kans om een sterke start te geven aan jouw carrière binnen de IT! De job Je werkt nauw samen met het Devops team, en zal je voornamelijk bezighouden met het automatiseren van infrastructure componenten. De componenten worden opgevraagd door het DevOps

Bekijk vacature »

Software ontwikkelaar

Ben jij graag bezig met verschillende projecten? Vind jij beleving van klanten én medewerkers ook belangrijk? Wij zijn vanwege de doorontwikkeling van het applicatielandschap van onze opdrachtgever op zoek naar een fulltime software ontwikkelaar. Omschrijving Jij en jouw collega’s zijn verantwoordelijk voor de continuïteit en waarborging van het applicatielandschap. Om de processen vloeiend te laten verlopen is software ontwikkeling daarom van essentieel belang. Onze opdrachtgever doet dit voornamelijk zelf, met door hun eigen ontwikkelde applicaties. Dit betekent dat jij: functionele eisen vertaalt naar gebruiksvriendelijke software; tijdens SCRUM sessies advies geeft over het te bouwen ontwerp; nieuwe software ontwikkelt en het

Bekijk vacature »

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 »

Microsoft Acess Developer

Functieomschrijving Wat ga je doen? Heb jij ongeveer 3 jaar ervaring als Software Developer, en komen de volgende kennisgebieden jou niet vreemd voor: MS Acces, C# & SQL? Vind jij het daarnaast leuk om maatwerk software te ontwikkelen voor klanten in een bijzondere branche? Lees dan snel verder! Als developer ben jij samen met een gemotiveerd team van 10 collega’s verantwoordelijk voor het creëren van aangemeten software voor klanten. Je bent klantvriendelijk en oplossingsgericht ingesteld, omdat het essentieel is om de klanten zo goed mogelijk te helpen met hun uitdagingen. Het is mogelijk om vanuit huis je werkzaamheden uit te

Bekijk vacature »

.NET Developer

Functie De perfecte combinatie tussen techniek en vastgoed. Werk samen met de senior software developer om allerlei software van fluX te verbeteren. Gelukkig voel jij je helemaal thuis in de codewereld van .NET. Dus of je nu bezig bent met het verhogen van de conformiteitscore of het automatiseren van allerlei taxatiemodellen, jij weet precies hoe je de doelstellingen realiseert. En dat terwijl je ook samenwerkt met een extern ontwikkelteam. Waar dit team bepaalde softwaresystemen ontwikkelen, richt jij je vooral op onze Nederlands georiënteerde producten en alle wetgeving die daarbij komt kijken. Voor minimaal 32 uur per week verrijk jij onze

Bekijk vacature »

Front-end Angular developer

Functie In jouw rol als Front-End developer werk je samen met de backend developers om middels tweewekelijkse sprints het platform naar een hoger niveau te tillen. Hiernaast heb je affiniteit met data en werk je graag samen met het team om de gegevensintegriteit en -beveiliging te waarborgen, om ervoor te zorgen dat de gebruiker wereldwijd de beste SaaS-services heeft. Deze organisatie heeft meer dan 100 mensen in dienst, waarvan er 45 in Nederland werken. Het ontwikkelteam bestaat uit 10 mensen en is verdeeld in 2 scrumteams. Het eerste team bestaat uit Java en Scala ontwikkelaars. Het tweede team, waar jij

Bekijk vacature »

Sportieve Junior C#.NET developer gezocht!

Bedrijfsomschrijving Wil jij werken aan webapplicaties bij de marktleider binnen de branche? Voor een klant in de buurt van Oosterhout ben ik op zoek naar een Fullstack .NET developer. Dit bedrijf bestaat bijna 10 jaar en is inmiddels uitgegroeid tot marktleider in Nederland en heeft tevens kantoren in meerdere landen in Europa. Dit bedrijf bouwt webapplicaties waarbij internationaal enkele honderdduizenden deelnemers, soms tegelijk, een beroep doen op de realtime data uit deze applicaties. Dit brengt erg veel technische uitdaging met zich mee. Ze ontwikkelen nieuwe applicaties maar ook bestaande applicaties worden uitgebreid en verbeterd. Hier kan jij een onderdeel van

Bekijk vacature »

Applicatie Ontwikkelaar

Bedrijfsomschrijving DUO verzorgt als uitvoeringsorganisatie, zijnde onderdeel van het Ministerie van Onderwijs, Cultuur en Wetenschap de uitvoering van complexe wet- en regelgeving en heeft een uitgebreid dienstenpakket. DUO financiert en informeert onderwijsdeelnemers en onderwijsinstellingen. Voor verdere informatie zie www.duo.nl Functieomschrijving Wie zoeken we? Jij bent een enthousiaste, flexibele OPS’er die het leuk vindt om het bestaande examenlandschap te vernieuwen. Je bent leergierig en hebt interesse in cloud- en containertechnieken zoals OpenShift, Docker en Helm. Je gaat een uitdaging niet uit de weg en wil je nieuw opgedane kennis graag delen met de collega’s binnen en buiten het team. Doordat de

Bekijk vacature »

Pagina: « vorige 1 2 3 4 volgende »

Ward van der Put
Moderator

Ward van der Put

13/11/2013 10:16:00
Quote Anchor link
Wouter J op 12/11/2013 19:11:35:
Natuurlijk optie B. Daardoor kun je makkelijk en snel het namespace aanpassen en kun je gaan aliasen.

Optie B is echt de best practise.

Waarom is B de best practice? Ik zou in dit voorbeeld explicieter Foo\Bar als sub-namespace gebruiken en use specifieker richten op de daaruit gebruikte klasse. Of zie ik het verkeerd?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
namespace Foo\Bar;

use Test;

class FooBar
{
    public function test()
    {

        $test = new Test();
    }
}

?>
 
PHP hulp

PHP hulp

06/01/2025 06:52:21
 
Wouter J

Wouter J

13/11/2013 10:20:01
Quote Anchor link
Ward, wat bedoel je?
 
Ward van der Put
Moderator

Ward van der Put

13/11/2013 10:24:56
Quote Anchor link
Wat is het voordeel van (optie B):

namespace Foo;
use Bar\Test;

ten opzichte van (alternatief C):

namespace Foo\Bar;
use Test;

Gewoon een vraag. Ik ben geneigd de tweede te gebruiken als je enkel in de sub-namespace opereert, zoals in het voorbeeld van Ozzie het geval was.
 
Wouter J

Wouter J

13/11/2013 10:33:32
Quote Anchor link
Goed, allereerst:

namespace Foo;
use Bar\Test;

Betekend niet dat je Foo\Bar\Test krijgt, maar Bar\Test.

Ten tweede, de namespace zegt iets over de plek van de huidige code. De use zegt iets over de namespace van de klasse die je gebruikt.

Een real live voorbeeldje, je hebt een HTML tree met nodes erin:
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
<?php
namespace Ozzie\Core\Tree;

use Ozzie\Core\Tree\Node\NodeInterface;

class HtmlTree // extends ... (weggelaten om niet nog een namespace te hebben)
{
    // ...
    public function addChild(NodeInterface $node)
    {

        // ...
    }
}

?>


Dit ga ik natuurlijk niet veranderen naar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
namespace Ozzie\Core\Tree\Node\HtmlTree;

class HtmlTree
{
    // ...
    public function addChild(NodeInterface $node)
    {

        // ...
    }
}

?>


Want nu zit het HtmlTree object ineens in de Ozzie\Core\Tree\Node namespace, waar die helemaal niet thuis hoort.
Gewijzigd op 13/11/2013 10:41:44 door Wouter J
 
Ward van der Put
Moderator

Ward van der Put

13/11/2013 10:46:40
Quote Anchor link
Dank je, dat is duidelijk.

Daarom zou ik bij het voorbeeld van Ozzie zeggen: als Foo\Bar\FooBar de klasse Foo\Bar\Test gebruikt, delen ze de sub-namespace Foo\Bar. Toch?
 
Wouter J

Wouter J

13/11/2013 10:51:58
Quote Anchor link
Ja, dat klopt. Dan wordt in de meeste OSS projects geen use statement gebruikt (zelfde voor global PHP classes)
 
Ozzie PHP

Ozzie PHP

13/11/2013 13:46:27
Quote Anchor link
Guys, mijn vraag ging dus over verschillende namespaces. Het gaat er dus om... gebruik je dan "use" of schrijf je de naam van de class voluit. Als ze dezelfde namespace delen, dan is dit uiteraard niet aan de orde.

Zoals je in mijn voorbeeld kunt zien is er sprake van 2 verschillende namespaces (Foo waarin class Foobar zich bevindt, en Bar waarin class Test zich bevindt). Er worden dus geen namespaces gedeeld. Is optie B dan nog steeds de beste keuze?

Optie A:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
namespace Foo;

class FooBar {

  public function test() {
    $test = new \Bar\Test();
  }

}


?>

Optie B:

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
<?php
namespace Foo;

use Bar\Test;

class FooBar {

  public function test() {
    $test = new Test();
  }

}


?>
 
Ward van der Put
Moderator

Ward van der Put

13/11/2013 14:03:25
Quote Anchor link
Ja, beginnen met een lijstje use-statements is wel zo overzichtelijk. Dat geeft overzicht. En dat maakt keuzen in het vervolg van de code duidelijk, bijvoorbeeld:

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

use FastMailer\Test as MailTest;
use TurboUnit\Test  as UnitTest;
?>
 
Dos Moonen

Dos Moonen

13/11/2013 14:09:30
Quote Anchor link
Je mag het helemaal zelf weten. Dus doe wat het meest leesbaar is. Dat vind ik tenminste.
Met de namespace 'Bar' en wanneer je Bar\Test maar een keer gebruikt kan je net zo goed new \Bar\Test() gebruiken.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php

namespace Foo\Bar\Meow\Woof;

class Test {

  public function meow(\Organism\Animal\Mammal\Feline\Cat $cat) {
    $cat->feed();
  }


  public function woof(\Organism\Animal\Mammal\Canine $dog) {
    $dog->feed();
  }

}


// Versus

namespace Foo\Bar\Meow\Woof;

use Organism\Animal\Mammal;

class Test {

  public function meow(Mammal\Feline\Cat $cat) {
    $cat->feed();
  }


  public function woof(Mammal\Canine\Dog $dog) {
    $dog->feed();
  }

}


// Versus

namespace Foo\Bar\Meow\Woof;

use Organism\Animal\Mammal\Feline\Cat;
use Organism\Animal\Mammal\Canine\Dog;

class Test {

  public function meow(Cat $cat) {
    $cat->feed();
  }


  public function woof(Dog $dog) {
    $dog->feed();
  }

}


?>
Gewijzigd op 13/11/2013 14:10:17 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

13/11/2013 14:22:57
Quote Anchor link
@Ward: oké, duidelijk. Ik ben benieuwd of je trouwens het antwoord weet op mijn volgende vraag. Veel libraries die met namespaces werken houden zich aan de PSR-0 standaard. Dan kom je als autoload-method dit tegen:

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

function autoload($className)
{

    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }

    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

    require $fileName;
}


?>

Ward, jij gebruikt deze versie volgens mij ook.

Nu mijn vraag. De allereerste regel van deze method is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$className
= ltrim($className, '\\');
?>

Die regel staat daar blijkbaar met een reden... maar wie vertelt mij waarom? Aangezien het een autoload functie betreft, wordt deze nooit handmatig aangeroepen. Nu heb ik eens verschillende manieren getest om een class in te laden, dus met de complete class-naam en door "use" te gebruiken. In geen enkel geval krijg ik het voor elkaar dat de variabele $className met een backslash begint. Waarom wordt die dan toch getrimd? Kan iemand dat uitleggen? Ward misschien, aangezien jij het ook in jouw autoload method gebruikt?

@Dos:

>> Met de namespace 'Bar' en wanneer je Bar\Test maar een keer gebruikt kan je net zo goed new \Bar\Test() gebruiken.

Jawel, dat kan... je zou echter ook kunnen zeggen dat je door "use" te gebruiken meteen kunt zien wat voor "vreemde" (niet tot de namespace behorende) classes er in je code aanwezig zijn.

Het verschil tussen versie 2 en 3 is ook wel grappig inderdaad. Ik denk dat ik toch voor de laatste variant dan zou gaan, omdat je dan specifieker weet om welke classes het gaat. Van de andere kant... stel dat je 20 classes uit die namespace zou gebruiken, dan moet je 20x "use" gebruiken??? Ward en Wouter, welke versie van Dos zouden jullie gebruiken. De 2e of de 3e?
Gewijzigd op 13/11/2013 14:25:48 door Ozzie PHP
 
Dos Moonen

Dos Moonen

13/11/2013 14:39:11
Quote Anchor link
Ozzie PHP op 13/11/2013 14:22:57:
In geen enkel geval krijg ik het voor elkaar dat de variabele $className met een backslash begint. Waarom wordt die dan toch getrimd? Kan iemand dat uitleggen? Ward misschien, aangezien jij het ook in jouw autoload method gebruikt?

Ik vermoed dat het met unserialize() mogelijk is. Ergens tussen 5.3 en de huidige versies is support voor FQNS's toegevoegd geloof ik. Dus als je een up-to-date PHP versie hebt zou je het weg kunnen halen. Maar laat het er in zitten voor backwards compatibility.

Ozzie PHP op 13/11/2013 14:22:57:
@Dos:

>> Met de namespace 'Bar' en wanneer je Bar\Test maar een keer gebruikt kan je net zo goed new \Bar\Test() gebruiken.

Jawel, dat kan... je zou echter ook kunnen zeggen dat je door "use" te gebruiken meteen kunt zien wat voor "vreemde" (niet tot de namespace behorende) classes er in je code aanwezig zijn.

Het verschil tussen versie 2 en 3 is ook wel grappig inderdaad. Ik denk dat ik toch voor de laatste variant dan zou gaan, omdat je dan specifieker weet om welke classes het gaat. Van de andere kant... stel dat je 20 classes uit die namespace zou gebruiken, dan moet je 20x "use" gebruiken??? Ward en Wouter, welke versie van Dos zouden jullie gebruiken. De 2e of de 3e?

Je kunt 2 en 3 combineren en je code leesbaar houden.
 
Ozzie PHP

Ozzie PHP

13/11/2013 14:45:50
Quote Anchor link
>> Ik vermoed dat het met unserialize() mogelijk is. Ergens tussen 5.3 en de huidige versies is support voor FQNS's toegevoegd geloof ik. Dus als je een up-to-date PHP versie hebt zou je het weg kunnen halen. Maar laat het er in zitten voor backwards compatibility.

Ah, oké. Dan laat ik het erin staan.

>> Je kunt 2 en 3 combineren en je code leesbaar houden.

Zoiets bedoel je?

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
<?php
namespace Foo\Bar\Meow\Woof;

use Organism\Animal\Mammal;

class Test {

  public function meow(Feline\Cat $cat) {
    $cat->feed();
  }


  public function woof(Canine\Dog $dog) {
    $dog->feed();
  }

}

?>

Klopt dit eigenlijk wel? Ik heb jouw 2e voorbeeld gepakt en in de code "Feline\Cat" gebruikt ipv "Mammal\Feline\Cat". Maar misschien doe ik nu iets verkeerd.
 
Ward van der Put
Moderator

Ward van der Put

13/11/2013 15:04:35
Quote Anchor link
De PHP-namespace begint met \ maar daarvoor heb je geen autoloader nodig. De ltrim() laadt dus alle behalve wat niet geladen hoeft te worden: klassennamen die beginnen met \.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
// (a) Niks autoloader, we gebruiken Exception van PHP:
namespace Foo;
throw new \Exception();

// (b) Via de autoloader laden we Foo\Exception in ../lib/Foo/Exception.php:
namespace Foo;
throw new Exception();
?>

Met andere woorden: de autoloader mag geen klassen die met \ beginnen laden, want dat is het domein van PHP. En vice versa: als de autoloader aan bod komt, moet die een van onze eigen klassen laden, geen klasse van PHP.
 
Dos Moonen

Dos Moonen

13/11/2013 15:07:18
Quote Anchor link
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
<?php

use Organism\Animal\Mammal;
// Is de kortere versie van
use Organism\Animal\Mammal as Mammal;

// Als er een class Mammal bestaat in de namespace \Organism\Animal dan werkt het volgende:
$mammal = new Mammal; // er vanuitgaant dat het geen abstracte class is :p

// Als er een class Feline bestaat in de namespace \Organism\Animal\Mammal dan werkt het volgende:

$feline = new Mammal\Feline;
$feline = new \Organism\Animal\Mammal\Feline; // de eerste \ hoeft niet ZOLANG je niets als 'Organism' aliased. OK, behalve \Organism maar ik zou niet weten waarom je dat zou doen.

?>


Bij jouw voorbeeld is er niets als 'Feline' of 'Canine' ge-aliased. Dus typehint je op \Feline\Cat en \Canine'\Dog.

Met 2 & 3 combineren bedoelde ik het volgende:
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
<?php

[code]<?php
namespace Foo\Bar\Meow\Woof;

use Organism\Animal\Mammal\Canine\Dog;
use Organism\Animal\Mammal\Canine\Wolf;
use Organism\Animal\Mammal\Feline;

$dog = new Dog;
$wolf = new Wolf;

$cat = new Feline\Cat;
$lion = new Feline\Lion;
$tiger = new Feline\Tiger;
$leopard = new Feline\Leopard

?>
 
Ozzie PHP

Ozzie PHP

13/11/2013 15:15:26
Quote Anchor link
@Ward, ik begrijp niet helemaal wat je bedoelt.

>> De ltrim() laadt dus alle behalve wat niet geladen hoeft te worden: klassennamen die beginnen met \.

De vraag is waarom die ltrim daar staat. De php classes komen sowieso de autoloader niet binnen, want die zijn al geladen aan het begin van ieder request. Daarnaast... als je in jouw autoload method $className echoot (probeer maar eens), dan zul je zien dat geen enkele classnaam met een \ begint. Vandaar dus mijn vraag wat die ltrim daar doet.

@Dos: ah oké. Da's een duidelijk voorbeeld.

Even nog een kleine nuance...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
use Organism\Animal\Mammal;
// Is de kortere versie van
use Organism\Animal\Mammal as Mammal;
?>

Dit is niet helemaal waar. In het 1e geval zeg je "gebruik de class Organism\Animal\Mammal". In het 2e geval zeg je "gebruik voor de class Organism\Animal\Mammal vanaf nu Mammal". Komt in dit geval weliswaar op hetzelfde neer, maar in de parktijk zul je dat alleen gebruiken om iets te "hernoemen", bijv.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
use Organism\Animal\Mammal as Zoogdier;
?>
 
Dos Moonen

Dos Moonen

13/11/2013 15:16:17
Quote Anchor link
Ward van der Put op 13/11/2013 15:04:35:
De PHP-namespace begint met \ maar daarvoor heb je geen autoloader nodig. De ltrim() laadt dus alle behalve wat niet geladen hoeft te worden: klassennamen die beginnen met \.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
// (a) Niks autoloader, we gebruiken Exception van PHP:
namespace Foo;
throw new \Exception();

// (b) Via de autoloader laden we Foo\Exception in ../lib/Foo/Exception.php:
namespace Foo;
throw new Exception();
?>

Met andere woorden: de autoloader mag geen klassen die met \ beginnen laden, want dat is het domein van PHP. En vice versa: als de autoloader aan bod komt, moet die een van onze eigen klassen laden, geen klasse van PHP.


Emhe...
Als je begint met een \ geef je aan dat je vanaf de root begint. Ik weet behoorlijk zeker dat het trimmem van de eerste \ er mee te maken had dat dit niet gedaan werd in PHP's core.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$miauw
= Miauw\Woef; // spl_autoload_call('Miauw\Woef')
$miauw = \Miauw\Woef; // spl_autoload_call('\Miauw\Woef') in bepaalde PHP versies voor het gefixt was. ltrim() was dus nodig.
?>
Gewijzigd op 13/11/2013 15:17:00 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

13/11/2013 15:21:26
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$miauw
= \Miauw\Woef;
?>

Hier wordt toch geen class geladen? Je vergeet het keyword "new".

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$miauw
= new \Miauw\Woef;
?>

In de autoloader zal de class-naam nu gewoon "Miauw\Woef" zijn (zonder slash aan het begin). Vandaar dat ik het zo raar vindt dat daar ltrim staat.

Maar eerder zei je dat het in eerdere versies fout ging. Als ik altijd een nieuwere PHP versie gebruik, kan ik die ltrim dan gewoon achterwege laten?
Gewijzigd op 13/11/2013 15:23:07 door Ozzie PHP
 
Dos Moonen

Dos Moonen

13/11/2013 15:21:39
Quote Anchor link
Ozzie PHP op 13/11/2013 15:15:26:
Dit is niet helemaal waar. In het 1e geval zeg je "gebruik de class Organism\Animal\Mammal". In het 2e geval zeg je "gebruik voor de class Organism\Animal\Mammal vanaf nu Mammal". Komt in dit geval weliswaar op hetzelfde neer, maar in de parktijk zul je dat alleen gebruiken om iets te "hernoemen", bijv.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
use Organism\Animal\Mammal as Zoogdier;
?>



http://www.php.net/manual/en/language.namespaces.importing.php
Voorbeeld 1:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

// this is the same as use My\Full\NSname as NSname
use My\Full\NSname;

?>
 
Ozzie PHP

Ozzie PHP

13/11/2013 15:29:52
Quote Anchor link
Dos Moonen op 13/11/2013 15:21:39:
http://www.php.net/manual/en/language.namespaces.importing.php
Voorbeeld 1:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

// this is the same as use My\Full\NSname as NSname
use My\Full\NSname;

?>

Dit klopt... in die zin dat het op hetzelfde neerkomt, omdat je dezelfde naam gebruikt. Maar in de praktijk zul je dat niet zo doen. Je zult alleen hernoemen als de naam anders is.

use Dierentuin\Beesten\Olifant
Dit wil zeggen: gebruik de class "Olifant" van de namespace "Dierentuin\Beesten"

use Dierentuin\Beesten\Olifant as Olifant
Dit wil zeggen: gebruik de class "Olifant" van de namespace "Dierentuin\Beesten" en noem deze class "Olifant". Hé... maar dat is een beetje onzinnig. De class heet al "Olifant" en dan ga ik 'm hernoemen naar "Olifant". Dat heeft niet zoveel zin!

use Dierentuin\Beesten\Olifant as Dombo
Dit wil zeggen: gebruik de class "Olifant" van de namespace "Dierentuin\Beesten" en noem deze class "Dombo". Nu heeft het wel zin. In plaats van "Olifant" kan ik nu "Dombo" gebruiken. Vraag me niet waarom je dat zou willen, maar dat even terzijde :)

Een praktijkvoorbeeld zou bijv kunnen zijn:

use My\Exception\Mailer as MyExceptionMailer
 
Dos Moonen

Dos Moonen

13/11/2013 15:34:20
Quote Anchor link
Emhe... Je vergeet het deel waar je de class EN de namespace aliased.

Ik snap niet wat er volgens jou mis is aan de volgende stelling:
'use My\Full\NSname;' en 'use My\Full\NSname as NSname;' doen PRECIES het zelfde wat PHP betreft.
Gewijzigd op 13/11/2013 15:38:28 door Dos Moonen
 

Pagina: « vorige 1 2 3 4 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.