namespaces

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Database developer - SQL

Functie omschrijving Kan jij goed overweg met complexe algoritmes en het schrijven van procedures in T-SQL? Heb jij al wat ervaring opgedaan met SQL en vind je het tijd voor de volgende stap? Lees dan snel verder! Dit software bedrijf, gespecialiseerd in de ontwikkeling van logistieke software, is op zoek naar een ervaren SQL database developer. Jouw werkzaamheden zullen onder andere bestaan uit: Je sluit aan bij meetings en brengt het gehele logistieke proces in kaart. Vervolgens ga je als lead developer aan de slag om de klus te klaren. Je stuurt het junior developer team en helpt, zo nodig,

Bekijk vacature »

3D BIM Add-on Developer

Als 3D BIM add- on ontwikkelaar bij KUBUS ontwikkel je add-ons (BCF Managers genaamd) voor de toonaangevende building information modeling (BIM) programma's Revit, Navisworks, Archicad, AutoCAD en Tekla Structures. BCF Managers maken gegevensoverdracht mogelijk tussen BIM-software en BIMcollab. Je werkt zowel aan de front- als aan de back-end. Als softwarebedrijf bevindt KUBUS zich in een unieke positie. We bouwen aan onze eigen producten die wereldwijd door tienduizenden gebruikers worden gebruikt. Ons bedrijf heeft precies de juiste grootte: groot genoeg om echt impact te maken in de markt, maar klein genoeg om als individuele ontwikkelaar invloed uit te kunnen oefenen en

Bekijk vacature »

Laravel developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »

Software Ontwikkelaar C# .NET

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 Amersfoort 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 »

Front-end (Angular) developer - remote werken

Functie Als Front-end (Angular) developer ga je aan de slag met het uitbouwen van hun webapplicatie, als één van de front-end experts ga je samen met collega’s in een devops team werken aan een nieuw front-end voor hun calculatie oplossing. Binnen de calculatiesoftware kunnen meerdere professionals tegelijk samenwerken, 3D calculaties uitvoeren en ook inzien met de benodigde specifieke details. Deze software wordt veel ingezet om projectbeschrijvingen en kosten in kaart te brengen, en tijdens de uitvoering te bewaken. Maar hiernaast liggen er in de toekomst veel meer plannen op het gebied van front-end in de andere applicaties. Genoeg te doen

Bekijk vacature »

Traineeship Java Developer

Functie Wat ga je doen als Java Developer? Jij start via ons bij deze opdrachtgever als Trainee Java ontwikkelaar, tijdens het traineeship ga je in 1 jaar van de basis naar professioneel Java ontwikkelaar. Je start samen met een groep trainees, volgt de aangeboden cursussen en gaat aan de slag bij één van onze opdrachtgevers. Na een aantal maanden volgt de volgende opdracht. Door de groei in jouw rol kom je op steeds complexere opdrachten terecht. Veel afwisseling dus. Collega’s met ervaring helpen je bij deze groei en samen met jouw coach ga je een persoonlijke leerplan opzetten om jou

Bekijk vacature »

Junior .NET developer

Functie Ons programma is voor afgestudeerde enthousiastelingen die het als een uitdaging zien om met een klein dynamisch team bij de grootste bedrijven van Nederland aan de slag te gaan. Tijdens jouw dienstverband word jij begeleid door een talent manager. Het ontwikkelen van jouw talent staat hierbij centraal. Het programma doorloop je met een team van circa 8 Mede- trainees. De eerste maand start je met een fulltime inhouse opleiding. Deze staat geheel in het teken van de werkzaamheden die jij verder in het programma zult uitvoeren. Na deze opleidingsmaand ga je aan de slag in een dynamische omgeving bij

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 »

Junior/medior PHP developer Onderwijssector

Functie Momenteel zijn ze op zoek naar een developer die, veelal fullstack, mee gaat werken aan de ontwikkeling van de producten en zo helpt aan de uitvoering van hun ontwikkelprojecten. Je komt te werken binnen hun development team bestaande uit 6 ontwikkelaars. Ze staan zowel open voor meer junior als medior/senior developers. Je kunt snel veel verantwoordelijkheid krijgen en doorgroeien binnen het bedrijf. Bovendien ben je betrokken bij het bepalen van de product roadmap en de inbreng van (nieuwe) technologieën. De applicaties waaraan je werk worden gebruikt op onderwijsinstellingen door heel Nederland. De tech-stack bestaat voornamelijk uit Laravel (PHP), Vue.js

Bekijk vacature »

.NET Developer Medior Senior

Dit ga je doen Ontwikkelprocessen verder optimaliseren en verder ontwikkelen met C#; CI/CD-pipelines automatiseren; Herbruikbare componenten maken; Testen; Front-end pagina's gebruiksvriendelijk maken. Hier ga je werken Als .NET Developer kom jij 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 .NET Developer werk jij aan het ontwikkelen van verbeterde software voor

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 »

Back-end developer

Functieomschrijving Voor een gewaardeerde werkgever in regio Tilburg zijn wij op zoek naar een gemotiveerde SQL Developer/ functioneel consultant. Jij wordt verantwoordelijk voor zowel het ontwerpen en implementeren van SQL-databases als voor het in kaart brengen van de bedrijfsprocessen van een organisatie en het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt als volgt uit te zien: Ontwerp en implementatie van SQL-databases: Je ontwerpt, ontwikkelt en implementeert SQL-databases om de data behoeften van de organisatie te ondersteunen; Analyse van bedrijfsprocessen: Je analyseert de bedrijfsprocessen van de organisatie om de behoeften van de klant te begrijpen en te vertalen naar

Bekijk vacature »

Junior .NET developer

Functie Ons programma is voor afgestudeerde enthousiastelingen die het als een uitdaging zien om met een klein dynamisch team bij de grootste bedrijven van Nederland aan de slag te gaan. Tijdens jouw dienstverband word jij begeleid door een talent manager. Het ontwikkelen van jouw talent staat hierbij centraal. Het programma doorloop je met een team van circa 8 Mede- trainees. De eerste maand start je met een fulltime inhouse opleiding. Deze staat geheel in het teken van de werkzaamheden die jij verder in het programma zult uitvoeren. Na deze opleidingsmaand ga je aan de slag in een dynamische omgeving bij

Bekijk vacature »

Front-end developer E-Commere

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 front-end developer heb je een adviserende rol en sta je aan het eindpunt van alles wat met designs te maken heeft. Je overlegt met klanten en collega’s, en zet je in om ideeen om te zetten tot unieke concepten. Je bent het aanspreekpunt voor de klant en bewaakt tevens de planning. Eisen

Bekijk vacature »

Front-end developer wanted! (Angular, React, Vue.j

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

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

27/11/2024 21:27:08
 
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.