Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Preview
Start a free Courses trial
to watch this video
Namespaces help to ensure that two different classes or functions with the same name do not break an application. Sometimes this is basic things, like having two different classes with a class named “Client”, like a Twitter Client and a HTTP Client.
Namespaces are a common idea in many
programming languages and
0:00
PHP has had them since PHP 5.3.
0:03
To some developers, they still feel a
little new.
0:05
So let's take a look at how they work.
0:08
The basic idea of using namespaces is to
ensure that two difference classes,
0:10
functions, or constants with the same name
do not cause conflicts.
0:14
For example, if you try to define two
classes called client,
0:17
then the second definition will cause a
fatal error,
0:21
complaining that you can not redefine that
class.
0:23
If instead, you put that class into a
namespace,
0:25
you can refer to both of them differently.
0:28
Let's take a look at how that works with
some code.
0:30
Before we get started, pay no attention to
line four,
0:33
as I'll explain about display errors later
on.
0:35
So on line seven, we're including a
third-party piece of
0:38
code that has been placed in the source
folder which handles HTTP interactions.
0:41
On line eight, we're including another
third-party piece of
0:46
code which will help us interact with the
Twitter API.
0:48
Sadly, the developer of both the HTTP code
and the Twitter code has not
0:52
used namespaces and instead declared the
classes into global namespace.
0:56
Now we have these two client classes which
looks a little funny and
1:00
will throw an error when we try and run
the preview.
1:03
So you can see here, they've had trouble
redeclaring the class client
1:05
because there's already a class called
client.
1:10
If we have a look at the code we can see
how to fix this.
1:12
We go into the source folder and inside
the HTTP folder and look at the Client.
1:16
You can see here that there's no namespace
declaration.
1:21
Now our namespace declaration is simply
the word namespace and then the name.
1:23
We save that and we do the same thing to
Twitter and save that too.
1:30
Now when we run this, PHP gives us a
different error.
1:36
The complaint here is the class client
does not exist.
1:39
Which is completely true.
1:41
Now the class client is not being defined
in the global space.
1:43
It has to be referenced with the
namespace.
1:46
Let's get back to our workspace and try
that out.
1:48
So if we remember the names of our
namespaces, which were HTTP,
1:52
we type that in and we use a backslash to
de-reference it.
1:55
Do the same for Twitter, and now we've
referenced our two different client
2:00
classes correctly with their namespaces so
PHP knows where to find that code.
2:03
We run this again.
2:07
We can see that two objects, HTTPClient
and TwitterClient, have been created.
2:10
We can further improve this code by using
auto-loading, and
2:14
that's what we'll do in the next lesson.
2:17
You need to sign up for Treehouse in order to download course files.
Sign up