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.
<?php
namespace Parents;
use Our\Child\DosMoonen; // maak gebruik van ons kind DosMoonen
$dos = new DosMoonen;
?>
Bovenstaande voorbeeld is logisch toch?
<?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?
<?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".
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:
<?php
use Wj\TestParser\Extension\BBcode\Parser as BBcodeParser;
use Faker\Factory as FakerFactory;
use Twig_Engine as Templating;
// ...
?>
Dat weet ik. Maar ik vermoede dat jij het niet helemaal snapte na dit stukje van jou:
<?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.
>> 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:
<?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.
> 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.
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?
> 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?
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.