Using namespaces: Basics

(PHP 5 >= 5.3.0, PHP 7)

Before discussing the use of namespaces, it is important to understand how PHP
knows which namespaced element your code is requesting. A simple analogy can be made
between PHP namespaces and a filesystem. There are three ways to access a file in a
file system:

Relative file name like foo.txt. This resolves to
currentdirectory/foo.txt where currentdirectory is the
directory currently occupied. So if the current directory is
/home/foo, the name resolves to /home/foo/foo.txt.

Relative path name like subdirectory/foo.txt. This resolves
to currentdirectory/subdirectory/foo.txt.

Absolute path name like /main/foo.txt. This resolves
to /main/foo.txt.

The same principle can be applied to namespaced elements in PHP. For
example, a class name can be referred to in three ways:

Unqualified name, or an unprefixed class name like
$a = new foo(); or
foo::staticmethod();. If the current namespace is
currentnamespace, this resolves to
currentnamespace\foo. If
the code is global, non-namespaced code, this resolves to foo.
One caveat: unqualified names for functions and constants will
resolve to global functions and constants if the namespaced function or constant
is not defined. See Using namespaces:
fallback to global function/constant for details.

Qualified name, or a prefixed class name like
$a = new subnamespace\foo(); or
subnamespace\foo::staticmethod();. If the current namespace is
currentnamespace, this resolves to
currentnamespace\subnamespace\foo. If
the code is global, non-namespaced code, this resolves to subnamespace\foo.

Fully qualified name, or a prefixed name with global prefix operator like
$a = new \currentnamespace\foo(); or
\currentnamespace\foo::staticmethod();. This always resolves
to the literal name specified in the code, currentnamespace\foo.

Well variables inside namespaces do not override others since variables are never affected by namespace but always global:"Although any valid PHP code can be contained within a namespace, only four types of code are affected by namespaces: classes, interfaces, functions and constants. "