namespaces

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

PHP Developer

Als PHP Developer bij Coolblue zorg je ervoor dat onze webshops elke dag een beetje beter zijn. Wat doe je als PHP Developer bij Coolblue? Als PHP Developer werk je met andere development teams samen om onze webshop zo optimaal mogelijk te laten werken en onze klanten blij te maken. Hoewel je een PHP Developer bent, sta je open om C# of Typescript in te zetten of te leren. Ook PHP Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen pure PHP code schrijven. Samenwerken met de klantreiziger om onze klanten

Bekijk vacature »

Backend Developer Scrummaster .NET

Samengevat: Deze werkgever is een ambitieus internetbedrijf met een passie voor digitale communicatie. Ben jij geschikt als Backend Developer? Heb je ervaring met .NET platform? Vaste baan: Backend Developer / SCRUM Master Scrum HBO WO €3.800 - €6.000 Deze werkgever is een innovatief bedrijf met enthousiaste mensen die jarenlang ervaring hebben met het ontwikkelen internet- en intranetoplossingen. Wij houden van korte lijnen en open en eerlijke communicatie. Wij zetten graag onze jarenlange ervaring in om perfect werkende oplossingen te ontwikkelen. Wij ondersteunen dienstverlenende organisaties bij het ontwikkelen en realiseren van een effectief, adaptief communicatieplatform. Je ontwikkelt met ons de meest

Bekijk vacature »

Software Developer

Dit ga je doen Je bent verantwoordelijk voor de warehouse applicatie die een integratie heeft met de PLC laag; Je ontwikkelt in C#/.Net; Je bent verantwoordelijk voor het ontwikkelen van interfaces en het visualiseren van componenten; Je denkt mee over het design voor business oplossingen; Je bent verantwoordelijk voor het testen van de gebouwde oplossing. Hier ga je werken Voor een internationale organisatie in de transport zijn wij momenteel op zoek naar een Software Developer. Ze zijn wereldwijd de grootste speler en lopen voorop met het automatiseren van alle processen van de warehouses. Op dit moment wordt er nog gebruik

Bekijk vacature »

C#.NET/Unity Developer

Functieomschrijving Voor een gewaardeerde werkgever in de omgeving van Breda zijn wij op zoek naar een software ontwikkelaar. Dit bedrijf houdt zich bezig met de ontwikkeling van WMS Software (C#/Unity & SQL). Past dit bij jou? Lees snel verder! Jouw werkzaamheden zullen er als volgt uitzien: Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van processen; Samen met 6 applicatieontwikkelaars hebben jullie de verantwoordelijkheid voor de uitbreiding en ontwikkeling van de webapplicaties; Het uitvoeren van updates/aanpassingen aan de huidig draaiende applicaties; Je bent een luisterend oor naar klanten en vertaalt hun wensen door naar bruikbare software. Bedrijfsprofiel Wie

Bekijk vacature »

PHP Developer - Draag bij aan de maatschappij!

Bedrijfsomschrijving Wil jij als applicatieontwikkelaar deel uitmaken van een gedreven ontwikkelteam en werken aan innovatieve producten? Dan hebben wij dé uitdaging voor jou! Wij zijn op zoek naar een enthousiaste collega die samen met ons de technische ondergrond van onze producten verder wil ontwikkelen met behulp van PHP. Met jouw expertise geef je de finishing touch aan onze producten om jezelf steeds opnieuw weer te verrassen. Functieomschrijving Bij ons staan innovatie en creativiteit centraal. Wij zijn op zoek naar een enthousiaste PHP ontwikkelaar die nieuwe ideeën en inzichten kan inbrengen en daarmee zichzelf en het team verder kan laten groeien.

Bekijk vacature »

C# Developer

Functie omschrijving Voor een softwarebedrijf in de omgeving van Veghel zijn we op zoek naar een C# developer. Word jij blij van ontwikkelen in C# en .NET? Lees dan snel verder! Jouw werkzaamheden zullen er als volgt uit gaan zien: Door middel van ASP.NET, MVC Framework en C# ga je webshops, websites en webapplicaties ontwikkelen. Je zorgt voor de optimalisatie van bestaande software en de automatisering van bedrijfsprocessen. Op basis van de wensen van de klant ga je samen met je collega's ga je op zoek naar de juiste oplossingen en je gaat dit uitwerken tot een mooi eindproduct. Bedrijfsprofiel

Bekijk vacature »

Als Front-end developer samenwerken met de beste c

Functie Momenteel zijn we voor één van de projecten bij hun key partner, een voorloper in de energiesector, op zoek naar gedreven Front-end developers. Ze nemen de lead in dit project en werken uitsluitend met vooruitstrevende technologieën. Ze verwachten dat de technologie die hier wordt ontwikkeld uiteindelijk door veel meer grote corporates, in verschillende sectoren zal worden toegepast. Dit is dan ook een heel uitdagend project om aan mee te gaan werken. Het team bestaat o.a. uit User Experience designers, Data Scientists en Software Engineers. De consultants en ontwikkelaars werken volgens de Design Thinking methode waarbij de eerste stappen van

Bekijk vacature »

Embedded Software Developer

Functie omschrijving Ben jij een Embedded Software Developer die affiniteit heeft met de allernieuwste technieken? Voor een mooi softwarebedrijf in omgeving Gouda zijn wij op zoek naar een Embedded Software developer. Binnen deze rol houdt jij je bezig met alle werkzaamheden die nodig zijn om een functionaliteit te bouwen. Denk aan ontwerpen, architectuur, programmeren en algoritmes. Je voert test en validatie werkzaamheden uit bij de implementatie bij de klant. Ben jij enthousiast en een echte team player? Lees dan snel verder en laat wat van je horen! Bedrijfsprofiel Onze opdrachtgever bestaat uit een groot aantal creatieve en ambitieuze ontwikkelaars. Ze

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

Front-end Developer

Functie omschrijving Wij zijn op zoek naar een Front-end Developer! Als Front-end Developer binnen dit softwarebedrijf ga je de frontends voor zowel je eigen interne projecten als die voor klanten opzetten, onderhouden en uitbreiden. Je zet ideeën om naar mooie successen voor de klanten. Dat is in een notendop wat je gaat doen! Wat kun je verwachten? Je werkt aan de doorontwikkeling van bestaande maatwerkapplicaties. Bijvoorbeeld wanneer de klant de applicatie wil uitbreiden met een nieuwe feature; Samen met het team van backenders en desginers zet je nieuwe ideeën van klanten om naar mooie oplossingen; Je werkt met verschillende frameworks.

Bekijk vacature »

PHP Developer

Functie omschrijving Als PHP / Laravel developer zal je in een klein team terecht komen. Wij zijn op zoek naar een echte specialist, iemand die de balans weet te vinden tussen techniek en perfectie. In de aankomende jaren wilt dit bedrijf flink groeien en daarom zijn ze op zoek naar jou! Wat ga je doen? Je draagt bij aan het ontwikkelen en onderhouden van bestaande webapplicaties die boordevol functionaliteit zitten. Deze applicaties worden gebruikt door de organisatie zelf en ook door de klanten. Inmiddels wordt er gewerkt met Laravel 8 en zijn er diverse koppelingen naar externe leveranciers. Verder zal

Bekijk vacature »

Full stack .NET developer Microsoft 365

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

SQL database developer

Functie omschrijving Voor een software bedrijf in omgeving Breda zijn wij op zoek naar een SQL database ontwikkelaar. Dit bedrijf bouwt applicaties om processen in distributiecentra te optimaliseren. Ter uitbreiding van het huidige team developers zijn wij op zoek naar een SQL database ontwikkelaar. De klanten van dit groeiende bedrijf zitten door heel Europa en jouw werkzaamheden zullen er als volgt uitzien: Het samenstellen van de software op basis van de input vanuit de klant (T-SQL & C#.NET). Het bezoeken van klanten om de processen en mogelijkheden in kaart te brengen. Het ontwerpen van databases met T-SQL als programmeer laag.

Bekijk vacature »

Frontend Developer

Functieomschrijving Voor de NIPV zijn wij opzoek naar een Frontend Developer. Als Frontend Developer ga jij aan de slag om dashboards te bouwen vanuit het datawarehouse. Dit stelt NIPV in staat om snel en eenvoudig bij correcte bedrijfsvoeringsinformatie te kunnen. Je ontwikkelt dashboards in PowerBI, publiceert en onderhoud die, verzameld en verwerkt feedback in overleg met het ontwikkelteam. Naast dashboards ontwikkel en onderhoud je een datamodel in Excel waarmee adviseurs, controllers en analisten in staat worden gesteld om de gegevens uit de dashboards te raadplegen en anders te filteren of bepaalde gegevens nader te verfijnen, zodat verdiepende vragen kunnen worden

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/05/2026 12:17:58
 
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.