Ola guys,

Stel ik heb mijn exceptions in de namespace exception staan:


ozzie/
      cacher/
             file.php
      exception/
                bar.php
                foo.php

Nu zit ik in mijn framework in de namespace ozzie\cacher. Binnen deze namespace wil ik de bar en foo exception kunnen gooien. Dan moet ik dus "use ozzie\exception" gebruiken.

Deze situatie dat ik "use" moet gebruiken voordat ik bestanden binnen mijn eigen library kan gebruiken komt best vaak voor. Uiteraard valt daar gewoon mee te leven, maar ik vroeg me ineens af... wat nu als ik alleen de namespace "ozzie" zou gebruiken?

In plaats van:

<?php

namespace ozzie\exception;

class foo {

}

?>
Zou je dan dit krijgen:

<?php

namespace ozzie;

class exception-foo {

}

?>
Dan staat alles in dezelfde namespace en hoef je dus nooit meer "use" te gebruiken.

Zal wel een stom idee zijn, maar het schoot me ineens te binnen en ik dacht ik gooi het even in de groep...
Wat ik wil kan niet echt... dat alles in je library dezelfde namespace heeft. Maar dat heeft weer andere gevolgen. Wat ik met name soort van "slordig" vind is dat je bij sommige classes veel uses krijgt, die in feite niet veel anders doen dan ervoor zorgen dat ik in de class zelf niet overal het woordje "ozzie" hoef te typen.

<?php

namespace ozzie\something;

use ozzie\foo;
use ozzie\bar;
use ozzie\baz;

class Boo {

public function test() {
$foo = new foo();
$bar = new bar();
$baz = new baz();
}

}

?>
Ik gebruik dus die use-statements zodat in de class zelf het woordje "ozzie" wegvalt. Zonder de use statements zou je dit krijgen:

<?php

namespace ozzie\something;

class Boo {

public function test() {
$foo = new ozzie\foo();
$bar = new ozzie\bar();
$baz = new ozzie\baz();
}

}

?>
Ik zou het wel mooi vinden als je de 1e optie kan gebruiken, maar dan zonder de use-statements, maar ja... dat kan niet.
>> Ik zou het wel mooi vinden als je de 1e optie kan gebruiken, maar dan zonder de use-statements, maar ja... dat kan niet.

Dat kan, zolang ze maar dezelfde namespace gebruiken:


<?php
namespace Ozzie;

class Boo
{
    public function test()
    {
        $foo = new Foo();
        $bar = new Bar();
        $baz = new Baz();
    }
}
?>


Dat brengt je dan bij een andere oplossing: het aanpassen van de structuur van je namespace. Als je het gevoel hebt dat use overbodig zou moeten zijn, dan kan dat namelijk betekenen dat je de hiërarchie in de namespace moet verbeteren.
Ozzie PHP op 08/06/2014 01:02:43

Er is niet iets mis mee, maar ik vroeg me af of het efficiënter kan.

Ik zit in mijn eigen ozzie library. Stel dat ik in namespace ozzie\foo ozzie\bar wil gebruiken, dan zou het best handig zijn als ik niet telkens use ozzie\bar (of wat dan ook) hoef te doen. Maar goed, het kan niet anders.


Maar je typt dit toch ook maar 1x? ( wanneer je een class aan het opbouwen bent ) Overigens is een goed IDE al voorzien van autocompletion en import functionaliteit waardoor je zelfs dit niet hoeft te doen.
@Ward:

>> Dat kan, zolang ze maar dezelfde namespace gebruiken:

Ja, dat weet ik... maar dan zou je complete library dus maar uit 1 namespace bestaan.

>> Dat brengt je dan bij een andere oplossing: het aanpassen van de structuur van je namespace. Als je het gevoel hebt dat use overbodig zou moeten zijn, dan kan dat namelijk betekenen dat je de hiërarchie in de namespace moet verbeteren.

Dat lijkt me vrij onmogelijk eigenlijk. Je zult altijd andere namespaces uit dezelfde libraries moeten importeren, tenzij je dus alles in één-en-dezelfde namespace zet.

@Reshad:

>> Maar je typt dit toch ook maar 1x? ( wanneer je een class aan het opbouwen bent ) Overigens is een goed IDE al voorzien van autocompletion en import functionaliteit waardoor je zelfs dit niet hoeft te doen.

Ja, je typt het ook maar 1x. Maar desalniettemin voelt het soms wat vreemd dat je in je eigen library dingen uit diezelfde library moet gaan importeren.

Reageren