namespaces

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

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 »

(Junior) Back-end Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Altijd al willen werken bij een organisatie, die maatwerk applicaties bouwt, die echt impact hebben in de maatschappij? Dit is je kans. Voor een kleine organisatie in de regio van Eindhoven ben ik op zoek naar een C# Ontwikkelaar. Jij gaat aan de slag met de ontwikkeling van maatwerk software en applicaties. Deze organisatie werkt voor grote organisaties in Nederland, maar ook voor het MKB. De projecten waar je aan gaat werken zijn erg divers, waardoor je werk uitdagend blijft en je erg veel kan leren. Verder ga je aan

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 »

Software Developer PHP

Functie omschrijving We are looking for a dutch native speaker Voor een opdrachtgever in de regio van Geldrop ben ik op zoek naar een Software Developer PHP. Jij krijgt een rol met veel verantwoordelijkheid in een groeiende organisatie. In deze functie werkt je voornamelijk remote en op een vast moment kom je met het team samen, om samen te werken en nieuwe doelen te bepalen. Wat ga je doen? Je wordt verantwoordelijk voor de interne applicatie; Je zorgt voor de doorontwikkeling van de applicatie: zowel back-end, front-end; De basis van het werk betreft front-end technieken; Periodiek bepaal je samen met

Bekijk vacature »

Senior .NET developer

Functie Als Senior .NET ontwikkelaar ga jij aan de slag in ons Research & development team. Ons team bestaat uit 17 collega’s! Wij zijn momenteel druk bezig met het opzetten van een geheel nieuwe architectuur voor een nieuw product. Hierbij maken wij o.a. gebruik van VS2022 en .NET 6.0. Jouw functie is dan ook voornamelijk backend georiënteerd bij ons. Aangezien wij meetapparatuur ontwikkelen voor de chemische industrie is het ook erg belangrijk om kwalitatief hoogwaardige software te ontwikkelen voor de besturing hiervan. Verder ben jij verantwoordelijk voor het designen, implementeren en testen van nieuwe features. Ook zorg jij voor toekomstbestendige

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Voor een opdrachtgever in omgeving Zoetermeer zijn wij op zoek naar een ontwikkelaar ter versterking van het huidige developers team. Heb jij altijd al willen werken voor een bedrijf, dat veilige netwerkverbindingen levert, door middel van veilige oplossingen, die door middel van de nieuwste technologieën ontwikkelt zijn? Stop dan nu met zoeken! Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten

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 »

SQL database developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als SQL database developer? Dit bedrijf bouwt applicaties om processen in distributiecentra te optimaliseren. Ter uitbreiding van het development team zijn wij op zoek naar een SQL database ontwikkelaar. Wil jij werken voor een groeiende werkgever in regio Breda waar jij de ruimte en tijd krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je houdt je bezig met het creëren en bouwen van MS SQL server databases; Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van logistieke processen; Je gaat projecten vanaf het begin tot het

Bekijk vacature »

Functioneel applicatiebeheerder - SOP-SYS-SAM

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Functioneel Applicatiebeheerder op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je gaat samenwerken in een team van circa 15 functioneel applicatiebeheerders en gaat onderdeel uitmaken van een DevOps team. Met dit team ga je applicaties (laten) ontwikkelen en beheren. Hierbij concentreer je je vooral op de functionele aspecten, zodat

Bekijk vacature »

Fullstack developer

Functie omschrijving We are looking for a dutch native speaker Wil jij werken als Senior Developer en werken aan een applicatie die duizenden marketingcampagnes automatisch aanstuurt? Dit is je kans! Kom werken voor onze opdrachtgever en in deze rol zul je veel vrijheid en verantwoordelijkheid krijgen om gezamenlijk de applicatie naar een hoger plan te tillen. Wat ga je verder doen: Optimaliseren, beheren en uitbreiden van onze applicatie; Het bouwen van aansluitingen op de systemen van partners middels API’s; Meedenken over de technische/ontwikkel-standaarden; Proactief verbeterpunten voorstellen. Bedrijfsprofiel Het is een organisatie die met een team van verschillende developers én marketeers

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 »

Software developer - C Sharp

Functie omschrijving Heb jij interesse in het programmeren en ontwikkelen van software? En heb jij enige ervaring met Oracle databases en PL/SQL? Wij zijn voor een leuke opdrachtgever in omgeving Naaldwijk op zoek naar een software ontwikkelaar die graag werkt met C#, JAVA of Oracle. Wij zoeken iemand die breed inzetbaar is en die aan veel verschillende applicaties wilt werken. Als software developer werk je met je collega's samen in een leuk en informeel team aan het (her)ontwerpen van bedrijfssystemen. Je houdt je bezig met het ontwikkelen van REST API's en je onderhoudt applicaties in Oracle PL/SQL en APEX. Vind

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 »

OutSystems developer

Dit ga je doen Klanten adviseren over de mogelijkheden van OutSystems; OutSystems oplossingen ontwikkelen en implementeren; Stakeholdermanagement; Kennis en expertise up to date houden en delen met het team. Hier ga je werken Onze opdrachtgever, gevestigd in regio Amsterdam, is een innovatieve dienstverlener die zich richt op grote corporates in verschillende sectoren. Doordat je bij veel verschillende klanten aan de slag zal gaan is geen enkel project hetzelfde. De organisatie kenmerkt zich door hoge mate van professionaliteit en innovatieve oplossingen. In de rol van OutSystems developer zal jij verschillende grote klanten helpen om efficiënte OutSystems oplossingen te ontwikkelen en implementeren.

Bekijk vacature »

Pagina: « vorige 1 2 3 4 volgende »

Ozzie PHP

Ozzie PHP

13/11/2013 15:44:53
Quote Anchor link
Haha, je snapt niet helemaal wat ik bedoel denk ik. Ze doen inderdaad precies hetzelfde. Wat ik probeer uit te leggen is dat je "use" ... "as" alleen gebruikt om iets te hernoemen.

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

use Our\Child\DosMoonen; // maak gebruik van ons kind DosMoonen

$dos = new DosMoonen;

?>

Bovenstaande voorbeeld is logisch toch?

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

use Our\Child\DosMoonen as DosMoonen; // maak gebruik van ons kind DosMoonen... en noem ons kind "DosMoonen"

$dos = new DosMoonen;

?>

In het bovenstaande voorbeeld gaan we je hernoemen naar DosMoonen. Waarom zouden we dat doen? Je heet al DosMoonen dus waarom zouden we je dan nogmaals gaan hernoemen naar DosMoonen?

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

use Our\Child\DosMoonen as OurChild; // maak gebruik van ons kind DosMoonen en noem hem OurChild

$dos = new OurChild;

?>

In het bovenstaande voorbeeld word jij door je ouders hernoemd naar "OnsKind". Nu heeft er dus een zinnige hernoeming plaatsgevonden.

Snap je wat ik bedoel? Het heeft geen zin om iets te hernoemen naar precies hetzelfde. Het is alsof je zegt rename "Ozzie PHP" naar "Ozzie PHP".
 
PHP hulp

PHP hulp

06/01/2025 07:03:29
 
Wouter J

Wouter J

13/11/2013 15:49:52
Quote Anchor link
Ozzie, en toch heeft dosMoonen gelijk. Eigenlijk zou je altijd use Ozzie\Core\Console\Application as Application moeten doen ipv use Ozzie\Core\Console\Application, maar PHP heeft zelf de shortcut erin gebouwd, zodat je wat minder typewerk hoeft te doen.

Merk overigens op dat ik bijna altijd aliases gebruik in mijn eigen projecten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
use Wj\TestParser\Extension\BBcode\Parser as BBcodeParser;
use Faker\Factory as FakerFactory;
use Twig_Engine as Templating;
// ...
?>
 
Dos Moonen

Dos Moonen

13/11/2013 15:55:02
Quote Anchor link
Dat weet ik. Maar ik vermoede dat jij het niet helemaal snapte na dit stukje van jou:
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();
  }

}

?>

Dat zou niet meer werken, wat ik uit probeerde te leggen: http://www.phphulp.nl/php/forum/topic/namespaces/92491/2/#665664
En dan ben jij blijkbaar oneens met de volgende stelling:
use Organism\Animal\Mammal;' is de kortere versie van 'use Organism\Animal\Mammal as Mammal;'

Wat blijkbaar een onnodige discussie ter weeg bracht.
Gewijzigd op 13/11/2013 15:56:24 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

13/11/2013 15:58:14
Quote Anchor link
@Wouter

>> Ozzie, en toch heeft dosMoonen gelijk. Eigenlijk zou je altijd use Ozzie\Core\Console\Application as Application moeten doen ipv use Ozzie\Core\Console\Application, maar PHP heeft zelf de shortcut erin gebouwd, zodat je wat minder typewerk hoeft te doen.

Ben ik het niet mee eens... vertaal letterlijk de tekst:
use Ozzie\Core\Console\Application // maak gebruik van de class Application (in de namespace...)

Tegenover:
use Ozzie\Core\Console\Application as Application // maak gebruik van de class Application (in de namespace...) en noem 'm Application. Dat is niet zinvol.

Hier is het natuurlijk prima:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
use Wj\TestParser\Extension\BBcode\Parser as BBcodeParser;
use Faker\Factory as FakerFactory;
use Twig_Engine as Templating;
// ...
?>


@Dos:

>> Wat blijkbaar een onnodige discussie ter weeg bracht.

We zitten in ieder geval weer op 1 lijn :)
Gewijzigd op 13/11/2013 15:59:31 door Ozzie PHP
 
Dos Moonen

Dos Moonen

13/11/2013 16:11:10
Quote Anchor link
> use Ozzie\Core\Console\Application // maak gebruik van de class Application (in de namespace...)
Nee.

'use Ozzie\Core\Console\Application;' doet twee dingen:
- alias de class/interface 'Ozzie\Core\Console\Application' als 'Application' als deze bestaat.
- alias de namespace 'Ozzie\Core\Console\Application' als 'Application'

'use Dars\Core\Request\HTTP\Internal as InternalRequest;' doet twee dingen:
- alias de class/interface 'Dars\Core\Request\HTTP\Internal' als 'InternalRequest' als deze bestaat.
- alias de namespace 'Dars\Core\Request\HTTP\Internal' als 'InternalRequest'.

Zolang er bij geen '\' na 'InternalRequest' volgt heb je het over de geimporteerde class.
Wanneer er wel een '\' na 'InternalRequest' volgt heb je het over de geimporteerde namespace.

Dat is hoe ik het interpeteer. Wat het voor mij duidelijker maakt.


"PHP namespaces support three kinds of aliasing or importing: aliasing a class name, aliasing an interface name, and aliasing a namespace name. Note that importing a function or constant is not supported." - http://php.net/manual/en/language.namespaces.importing.php

Aangezien https://wiki.php.net/rfc/use_function geaccepteert is zullen functies en constanten nog bij dat lijstje komen. Al moet je 'use function ...' en 'use const' gebruiken.
Gewijzigd op 13/11/2013 16:37:04 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

13/11/2013 17:08:27
Quote Anchor link
>> Dat is hoe ik het interpeteer. Wat het voor mij duidelijker maakt.

Dat is ook hoe ik het zie. Zo werkt het ook precies. Het ging er mij alleen even om dat je niet dit moet doen:

use Foo\Mailer as Mailer;

maar gewoon dit:

use Foo\Mailer;

Wel grappig dat je ook functions en constants kunt gebruiken. Kun je die constanten nu al gebruiken, of is dat pas vanaf een bepaalde php-versie?
 
Wouter J

Wouter J

13/11/2013 17:11:41
Quote Anchor link
PHP5.6
Gewijzigd op 13/11/2013 17:11:50 door Wouter J
 
Ozzie PHP

Ozzie PHP

13/11/2013 17:15:06
Quote Anchor link
>> PHP5.6

Hmmmm, da's jammer... dat gaat dus nog even duren.

Al met al weet ik nog steeds niet wat nu die ltrim in de autoload method doet. Iemand die daar uitsluitsel over kan geven? Volgens mij kan ik 'm er gewoon uitslopen?
 
Wouter J

Wouter J

13/11/2013 17:34:29
Quote Anchor link
> Al met al weet ik nog steeds niet wat nu die ltrim in de autoload method doet. Iemand die daar uitsluitsel over kan geven? Volgens mij kan ik 'm er gewoon uitslopen?

Hoe groot is jouw korte termijn geheugen? http://www.phphulp.nl/php/forum/topic/namespaces/92491/2/#665655
 
Ozzie PHP

Ozzie PHP

13/11/2013 17:38:32
Quote Anchor link
Grappig Wouter, ware het niet dat ik toevallig met Dos ook in een privé-onderonsje zat waar het over dit onderwerp ging. Dos raadde mij aan om objecten te serializen en unserializen om te kijken wat er gebeurt, maar nog steeds krijg ik bij de class-naam geen slash aan het begin te zien. Vandaar mijn vraag of ik het eruit kan slopen.
 
Wouter J

Wouter J

13/11/2013 17:51:31
Quote Anchor link
Wat gezocht naar de rede, want natuurlijk zit er een rede achter. Je mag van me uitgaan dat de PHP FIG zoveel commentaar krijgt dat elk woord een rede heeft, en elke functie in hun code dus al helemaal.

Quote:
I discovered some oddities with how class_exists() and is_callable()
work when you use fully qualified names; basically, the leading NS
separator results in a false negative lookup (i.e., existing class is
_not_ found). I found that simply doing an ltrim() on the classname as
the first operation in the reference implementation fixes this. This
also means the strripos() operation no longer needs to worry about a
position of 0, either.
Bron: https://groups.google.com/d/msg/php-fig/zaIwMnMQ1_M/N7TXasJ5cyYJ
 
Dos Moonen

Dos Moonen

13/11/2013 18:16:12
Quote Anchor link
Ik heb speciaal voor jou PHP 5.3.0 gecompiled op een virtual machine.

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

class A {}

spl_autoload_register(function ($class) {
    var_dump($class);

    class_alias('A', $class);
});




var_dump(phpversion());

$class = new \B;
var_dump($class);

class_exists('\\Miauw');

?>


Output onder PHP 5.5.5:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
string(5) "5.5.5"
string(1) "B"
class A#2 (0) {
}
string(5) "Miauw"


Output onder PHP 5.3.0
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
string(5) "5.3.0"
string(1) "B"
object(A)#2 (0) {
}
string(6) "\Miauw"


Zoals ik al eerder zei, vanwege backwards compatibility.

Als je nog wilt uitzoeken sinds welke versies het gefixed is kan je hier beginnen met je zoektocht:
https://github.com/php/php-src/blame/d86b5f01ac7089f46add60622260d6926c3977b8/Zend/zend_builtin_functions.c#L1245
Gewijzigd op 13/11/2013 18:20:25 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

13/11/2013 20:12:17
Quote Anchor link
>> Ik heb speciaal voor jou PHP 5.3.0 gecompiled op een virtual machine.

Wow, wat een eer... thanks :-)

Ik heb de test ook bij mij even gedraaid (versie 5.4.10)... en geen slash te bekennen. Ik kan ltrim er dus gewoon uitslopen :-)))


Toevoeging op 13/11/2013 20:42:53:

Nog 1 laatste vraag over PSR-0.

Is het altijd zo dat de "hoofd"-namespace wordt gebruikt voor het laden van classes? Dus stel je wil een prefix instellen die het pad van de library aangeeft, is het dan altijd zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
setPrefix('PDF'   , '/pad/naar/pdf-library');
setPrefix('PostNL', '/pad/naar/PostNL-library');
// enz.
?>

Of kan het ook zijn dat je een hoofd- en subnamespace moet kunnen instellen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
setPrefix('PDF\Exceptions' , '/pad/naar/pdf-library/exceptions');
setPrefix('PostNL\betaling', '/pad/naar/PostNL-library/betaling');
?>

Of is dit laatste nooit aan de orde?
Gewijzigd op 13/11/2013 20:47:26 door Ozzie PHP
 
Dos Moonen

Dos Moonen

13/11/2013 23:10:38
Quote Anchor link
Emhe... wat?
Met "hoofd"-namespace bedoel je de actieve namespace?
Of de Fully Qualified Name? (Hoe je de class/interface zou benaderen als je vanaf \ (de global namespace) zou beginnen)

http://www.php.net/manual/en/language.namespaces.rules.php
Daar kan je de regels lezen die PHP gebruikt om de FQN te bepalen.

Waarschijnlijk help dat je niet wat het is mij niet duidelijk wat je vraagt.
 
Wouter J

Wouter J

13/11/2013 23:22:22
Quote Anchor link
Ozzie, nee niet alleen beperken tot de hoofdnamespace. Jij bent alles veel te veel aan het beperken, niet doen dat is geen OO.

>> Ik heb de test ook bij mij even gedraaid (versie 5.4.10)... en geen slash te bekennen. Ik kan ltrim er dus gewoon uitslopen :-)))

Ach ja, waarom zou je je ook zorgen maken over servers die nog geen 5.4 draaien?
 
Ozzie PHP

Ozzie PHP

13/11/2013 23:24:31
Quote Anchor link
Wat ik bedoel is... je kunt aan je autoloader aangeven waar een bestand staat dat onder een bepaalde namespace valt. Dus stel, je hebt een of andere pdf library en de namespace (of heet dat vendor?) begint altijd met "PDF", dan geef je aan dat als de namespace met PDF begint dat ie het bestand dan moet zoeken in de map '/pad/naar/pdf-library': $autoloader->setPrefix('PDF', '/pad/naar/pdf-library');

Zou het nu ooit zo kunnen zijn dat dit niet enkel gebeurt op basis van de "hoofd"-namespace (vendor?), maar bijv. op basis van hoofdnamespace + subnamespace? Dus dat je zoiets krijgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$autoloader
->setPrefix('PDF\Exceptions' , '/pad/naar/pdf-library/exceptions');
$autoloader->setPrefix('PostNL\betaling', '/pad/naar/PostNL-library/betaling');
?>

Ik denk het niet, maar ik vroeg het me dus af.

Toevoeging op 13/11/2013 23:29:24:

>> Ozzie, nee niet alleen beperken tot de hoofdnamespace. Jij bent alles veel te veel aan het beperken, niet doen dat is geen OO.

Oké... dus dit moet ook gewoon kunnen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$autoloader
->setPrefix('PDF\Exceptions' , '/pad/naar/pdf-library/exceptions');
$autoloader->setPrefix('PostNL\betaling', '/pad/naar/PostNL-library/betaling');
?>


>> Ach ja, waarom zou je je ook zorgen maken over servers die nog geen 5.4 draaien?

Omdat ik op een eigen server draai misschien? :-s

Toevoeging op 13/11/2013 23:46:26:

@Wouter... er nog even verder over nadenkend... dat kan toch helemaal niet... dat je meer dan 1 namespace gebruikt? Stel je hebt dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$autoloader
->setPrefix('PostNL\betaling\generator' , '/pad/naar/PostNL-library/betaling/generators');
?>

En dan wil je bijv. een pakket_code genereren:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$pakket_code
= new PostNL\betaling\generator\pakket_code\nederland;
?>

Dan zou de autoloader nu dus eerst moeten kijken of er een pad is gekoppeld aan de namespace "PostNL". Nee! Volgende controle... is er een pad gekoppeld aan de namespace "PostNL\betaling". Nee, ook niet! Nog een controle: is er een pad gekoppeld aan de namespace "PostNL\betaling\generator". Ja, na 3 pogingen hebben we beet.

Kan aan mij liggen, maar dit is toch niet efficiënt? Of zie ik nu iets over het hoofd?

Dan zou de autoloader dus per namespace
 
Ward van der Put
Moderator

Ward van der Put

14/11/2013 07:01:09
Quote Anchor link
Ozzie PHP op 13/11/2013 23:24:31:
Kan aan mij liggen, maar dit is toch niet efficiënt? Of zie ik nu iets over het hoofd?

Ja, je ziet één ding over het hoofd: de autoloader zet de namespace-separator \ om in een directory-separator, bijvoorbeeld /, via de PHP-constante DIRECTORY_SEPARATOR. Het bruggetje is een directory- en bestandsstructuur die overeenkomt met de namespace-hiërarchie. Bijvoorbeeld Foo\Bar\Widget wordt gezocht in ../lib/Foo/Bar/Widget.php. Iets anders wil je meestal ook niet, want dan verlies je het overzicht.
 
Dos Moonen

Dos Moonen

14/11/2013 08:10:02
Quote Anchor link
Het lieft heb je alles wat de zelfde 'top-level namespace ("Vendor Name")' gebruikt onder de zelfde map staan.
Het hoeft niet. Misschien komt Library A met library B meegeleverd, deze gebruikt XYZ als top-level namespace. Vervolgens gebruik je naar library A ook nog lobrary D die ook XYZ als top-level namespace gebruikt. Dan zal je twee classloaders hebben die maar een deel van de XYZ namespace kunnen laden.

Omdat je niet met libraries wilt knoeien tenzij het echt moet. (Vanwege OCD is geen echte reden.) Laat je het zoals het is en heb je dus twee autoloaders die een top-level namespace delen.

Jij hoeft je in principe alleen zorgen te maken over jouw classes. Third party libraries zullen jouw classloader echt niet gebruiken.
Gewijzigd op 14/11/2013 08:11:41 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

14/11/2013 12:16:28
Quote Anchor link
>> Ja, je ziet één ding over het hoofd: de autoloader zet de namespace-separator \ om in een directory-separator, bijvoorbeeld /, via de PHP-constante DIRECTORY_SEPARATOR. Het bruggetje is een directory- en bestandsstructuur die overeenkomt met de namespace-hiërarchie. Bijvoorbeeld Foo\Bar\Widget wordt gezocht in ../lib/Foo/Bar/Widget.php. Iets anders wil je meestal ook niet, want dan verlies je het overzicht.

Dit principe begrijp ik. Maar ik heb m'n autoloader nu zo gemaakt dat ik kan zeggen: als de Vendor Name "Foo" is kijk dan in directory "x". En die directory "x" kan dan zijn wat ik zelf wil. Ik kan dus zeg maar dit doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$autoloader
->setNamespacePath('Foo', '/pad/naar/foo/library');
?>

of...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$autoloader
->setNamespacePath('Foo', '/pad/naar/blablabla');
?>

In de praktijk... stel ik zou dus iets met PostNL willen doen, heb ik er dan voldoende aan om de Vendor Name te koppelen aan een directory? Kan ik daar mee uit de voeten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$autoloader
->setNamespacePath('PostNL', '/pad/naar/postnl-library');
?>

>> Het lieft heb je alles wat de zelfde 'top-level namespace ("Vendor Name")' gebruikt onder de zelfde map staan.
Het hoeft niet. Misschien komt Library A met library B meegeleverd, deze gebruikt XYZ als top-level namespace. Vervolgens gebruik je naar library A ook nog lobrary D die ook XYZ als top-level namespace gebruikt. Dan zal je twee classloaders hebben die maar een deel van de XYZ namespace kunnen laden.

Oke, maar is het dan voldoende als ik met mijn autoloader dit kan doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$autoloader
->setNamespacePath('XYZ', '/pad/naar/xyz');
?>

In het voorbeeld van de Symfony class loader zie ik namelijk ook dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$autoloader
->setNamespacePath("XYZ\foo", '/pad/naar/xyz/foo');
?>

Hier wordt dus een sub-namespace gebruikt. Heb je dat in de praktijk nodig vraag ik me af. Moet mijn eigen autoloader dat kunnen?
 
Ward van der Put
Moderator

Ward van der Put

14/11/2013 12:54:06
Quote Anchor link
Dan zou ik eens naar de SplClassLoader kijken. Die doet namelijk hetzelfde:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
// Example which loads classes for the Doctrine Common package in the
// Doctrine\Common namespace.

$classLoader = new SplClassLoader('Doctrine\Common', '/path/to/doctrine');
$classLoader->register();
?>


De SplClassLoader heeft ook nog allerlei methoden aan boord om namespaces en packages een aparte behandeling te geven. Denk bijvoorbeeld aan packages die voor klassen de extensie .class of .class.php gebruiken in plaats van .php. Die komen "in het wild" vaker voor dan wij graag zien.
 

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.