Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Troubleshooting "The use statement with non-compound name ... has no effect"

Tags:

namespaces

php

Getting this error when I put use Blog; at the top.

Warning: The use statement with non-compound name 'Blog' has no effect in...

Blog is my namespace in which I have 3 classes: Article, List and Category and a few functions.

If I change my statememnt to use Blog\Article; then it works...

Can't I just specify the namespaces I want to use? Do I need to provide classes?

What if I have functions within that namespaces? When I call them outside of the namespace, I'm forced to prepend \Blog\ to each one's name...

like image 704
thelolcat Avatar asked Feb 16 '12 18:02

thelolcat


1 Answers

PHP's use isn't the same as C++'s using namespace; it allows you to define an alias, not to "import" a namespace and thus henceforth omit the namespace qualifier altogether.

So, you could do:

use Blog\Article as BA; 

... to shorten it, but you cannot get rid of it entirely.


Consequently, use Blog is useless, but I believe you could write:

use \ReallyLongNSName as RLNN; 

Note that you must use a leading \ here to force the parser into knowing that ReallyLongNSName is fully-qualified. This isn't true for Blog\Article, which is obviously already a chain of namespaces:

Note that for namespaced names (fully qualified namespace names containing namespace separator, such as Foo\Bar as opposed to global names that do not, such as FooBar), the leading backslash is unnecessary and not recommended, as import names must be fully qualified, and are not processed relative to the current namespace.

  • http://php.net/manual/en/language.namespaces.importing.php
like image 53
Lightness Races in Orbit Avatar answered Oct 07 '22 22:10

Lightness Races in Orbit