4 ms·
Off the top of my head, because when I want to reference My.Namespace.MyClass.Foo(), I have to do something like: use \My\Namespace; $var = new Namespace\M
by acabal 16y ago
Off the top of my head, because when I want to reference My.Namespace.MyClass.Foo(), I have to do something like:
use \My\Namespace;
$var = new Namespace\MyClass();
$var->Foo();
I have to remember and type the parent namespace for every imported class I want to use. In a big project this gets to be too much typing and too much for my brain to remember. Contrast with say, C#:
using My.Namespace;
MyClass var = new MyClass();
var.Foo();
You import a namespace, and the compiler figures out what goes where without you having to remember anything.
Plus the weird exceptions required for backwards compatibility, and the global namespace: I often forget where a root \ is required and where it isn't (not when declaring a namespace, but often--not always!--when referencing one). And of course there's the monstrous choice of namespace separator.
End of the world? Not really. Sucks? Yeah. And possibly a dealbreaker for me for larger projects with complicated namespaces and lots of classes.
I'd love for this to be just a misunderstanding on my part, because it would make my life a lot easier if PHP namespaces where more like C# ones!
- soulclap 16y agoHaven't worked with the PHP namespaces a lot myself yet but there seem to be more convenient ways: http://www.rooftopsolutions.nl/blog/taking-advantage-of-php-namespaces-with-older-code http://www.rooftopsolutions.nl/blog/taking-advantage-of-php-... And a good read on PHP namespaces in general: http://weierophinney.net/matthew/archives/254-Why-PHP-Namespaces-Matter.html http://weierophinney.net/matthew/archives/254-Why-PHP-Namesp...
- ary 16y agoYour PHP example is possible to write in a way that is nearly identical to the C# you provided. Why are you prefixing Namespace\MyClass(); when you declared your namespace scope in 'use \My\Namespace'? Your assignment can just be: $var = new MyClass(); This brings it pretty much in line with your C# example. Have you read the PHP docs on namespaces? http://www.php.net/manual/en/language.namespaces.basics.php http://www.php.net/manual/en/language.namespaces.basics.php
- acabal 16y agoThat's the point; the PHP doesn't compile without the namespace prefix. In fact I just tried it to make sure I'm remembering right.
- ary 16y agoI was taken aback when I tested this for myself as my initial reading of the PHP docs lead me to a very different conclusion. You are indeed correct, and in my opinion that is very broken. Touché.
- roel_v 16y agoYou can't import everything from a whole namespace, but you can do it on a per-class basis. The following works as expected: namespace My { class MyClass { public function Foo() { echo 'Foo'; } } } namespace { use My\MyClass; $var = new MyClass(); $var->Foo(); }