namespaces

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C# .NET Developer

Functieomschrijving Voor dit leuke softwarre bedrijf in de omgeving Vught zijn we per direct op zoek naar een C#/.NET Developer. Is development jouw passie en doe je dit graag met C#/.NET? Lees dan snel verder! Jou werkzaamheden zullen zijn: Zorgen voor de optimalisatie van de huidige software en het automatiseren van bedrijfsprocessen. Naar aanleiding van de wensen van de klant ga je, met je collega's op zoel naar passende oplossingen en je werkt dit uit tot een mooi eindproduct. Je gaat webshops, websites en webapplicaties ontwikkelen door middel van ASP.NET, C# en MVC Framework. Bedrijfsprofiel Deze opdrachtgever houdt zich bezig

Bekijk vacature »

C# developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als C# 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 »

Senior SQR Java Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Eindhoven Vacature ID: 13333 Introductie Are you passionate about contributing to the world's most advanced machines. Do you thrive in a challenging environment working with highly motivated and skilled teams? If so, we have the perfect opportunity for you! We are seeking a Senior Software Design Engineer for Sequence Tooling to play a critical role in creating and maintaining mission-critical software applications. In this role, you will focus on achieving maintainable software architecture that is transparent and easy to extend while maintaining a strong focus on software quality. You will work closely with

Bekijk vacature »

Software Programmeur

Functie omschrijving Voor onze opdrachtgever in omgeving Rotterdam zijn wij opzoek naar een software programmeur die goed kan schrijven in de talen C of C++ en die het leuk vind om te werken met Linux! Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed verloopt. Je zult klanten ondersteunen. Verder zul je technische ontwerpen en gebruikersdocumentaties schrijven en deze onderhouden. Bedrijfsprofiel Dit bedrijf wil de klanten een volledige oplossing kunnen bieden, waarbij ze een

Bekijk vacature »

Software developer

Werkzaamheden voor jou als software developer Voor een goede relatie in de regio Zwolle (meerdere locaties) zoeken wij een software developer die betrokken is bij de ontwikkelcyclus en verantwoordelijk is voor het testen en keuren van nieuwe en geoptimaliseerde software. In deze functie ben je in de implementatiefase de persoon die risico's beoordeelt en intern oplossingen aanbrengt om risico's te verkleinen. Binnen het ontwikkelteam van de software ben je een belangrijke schakel waar je intensief meewerkt met scrum. Het voorkomen van bugs in de programma's en het bevorderen van gebruiksvriendelijkheid voor eindklanten zijn voor jou een uitdaging en geeft voldoening

Bekijk vacature »

.NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

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 »

Python developer Consultancy

Functie Als Python developer bij deze organisatie werk je voor verschillende klanten. Doordat de oprichter een groot netwerk heeft kun je zelf voorkeuren uitspreken in het type projecten dat je wilt gaan doen. Zo zijn er bijvoorbeeld langdurige of juist korte projecten, maar is ook het type klant, of project bespreekbaar. Werk jij bijvoorbeeld graag aan een nieuw, state-of-the-art web portaal of ben je liever betrokken bij een migratietraject van een bestaande applicatie? Wij gaan voor jou aan de slag! Eisen • Je bent een gedreven developer met sterke voorkeur voor Python • Je bent meer dan een codeklopper •

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 »

SQL Database ontwikkelaar

Functie omschrijving Wil jij meewerken aan het creëren van slimme software om magazijnen als een geoliede machine te laten lopen? Wij zoeken een zorgvuldig persoon, iemand die niet snel de hand omdraait voor complexe algoritmes. Denk jij dat jij de SQL ontwikkelaar bent die wij zoeken? Lees snel verder en wie weet zitten we binnenkort samen aan tafel! Jouw werkzaamheden zullen er als volgt uitzien: Je houdt je bezig met het ontwerpen en ontwikkelen van MS SQL server databases, dit doe je met T-SQL als programmeer laag. Je gaat aan high-end software oplossingen werken, dit doe je voor de optimalisatie

Bekijk vacature »

.Net Ontwikkelaar

Dit ga je doen Het ontwerpen en ontwikkelen van software voor klanten; Het bijdragen van kennis en ervaring; Het integreren van van de software en afstemmen met klanten; Het functioneel testen van de ontwikkelde software. Hier ga je werken Voor onze relatie zijn wij momenteel op zoek naar een .Net Developer die wilt werken aan software die draait op machines wereldwijd. De organisatie produceert software voor applicaties die gebruikt worden in verschillende branches. De software wordt geleverd aan fabrikanten van verschillende robotica en machines. Als .Net ontwikkelaar ben je intern onderdeel van het team wat de applicatie omgevingen ontwikkeld en

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 »

Medior Java developer

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 »

Java Programmeur

Functie Heb jij altijd al samen willen werken met ervaren java ontwikkelaars dan hebben wij hier de ultieme kans voor jou! Voor een opdrachtgever in omgeving van Naaldwijk zijn wij op zoek naar uitbreiding van het vaste ontwikkel team. Je zult je hier voornamelijk bezig gaan houden met; Wijzigingsverzoeken van klanten uitvoeren, hier wordt je diep in betrokken; Samen met consultants sluit je aan bij gesprekken met klanten, voor alle projecten; Je schakelt veel met consultants, wat is de behoefte van de klant? Hoe kan je hierop integreren?; Het framework moet naar de Cloud gebracht worden, je wordt betrokken bij

Bekijk vacature »

SQL Database developer

Functie omschrijving Wil jij meewerken aan het creëren van slimme software om magazijnen als een geoliede machine te laten lopen? Wij zoeken een zorgvuldig persoon, iemand die niet snel de hand omdraait voor complexe algoritmes. Denk jij dat jij de SQL ontwikkelaar bent die wij zoeken? Lees snel verder en wie weet zitten we binnenkort samen aan tafel! Jouw werkzaamheden zullen er als volgt uitzien: Je houdt je bezig met het ontwerpen en ontwikkelen van MS SQL server databases, dit doe je met T-SQL als programmeer laag. Je gaat aan high-end software oplossingen werken, dit doe je voor de optimalisatie

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

18/05/2024 02:46:41
 
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.