Last active
September 14, 2016 12:13
-
-
Save kirilkirkov/c0db20da6c239578e593e278713e4f45 to your computer and use it in GitHub Desktop.
What are NAMESPACES and how works?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Namespacing does for functions and classes what scope does for variables. | |
It allows you to use the same function or class name in different parts of the | |
same program without causing a name collision. | |
In simple terms, think of a namespace as a person's surname. If there are two people n | |
amed "John" you can use their surnames to tell them apart. | |
The Scenario | |
Suppose you write an application that uses a function named output(). | |
Your output() function takes all of the HTML code on your page and sends it to the user. | |
Later on your application gets bigger and you want to add new features. | |
You add a library that allows you to generate RSS feeds. | |
This library also uses a function named output() to output the final feed. | |
When you call output(), how does PHP know whether to use your output() function or the | |
RSS library's output() function? It doesn't. Unless you're using namespaces. | |
Example | |
How do we solve having two output() functions? Simple. We stick each output() | |
function in its own namespace. | |
That would look something like this: | |
namespace MyProject; | |
function output() { | |
# Output HTML page | |
echo 'HTML!'; | |
} | |
namespace RSSLibrary; | |
function output(){ | |
# Output RSS feed | |
echo 'RSS!'; | |
} | |
Later when we want to use the different functions, we'd use: | |
\MyProject\output(); | |
\RSSLibrary\output(); | |
Or we can declare that we're in one of the namespaces and then we can | |
just call that namespace's output(): | |
namespace MyProject; | |
output(); # Output HTML page | |
\RSSLibrary\output(); | |
No Namespaces? | |
If we didn't have namespaces we'd have to (potentially) change a lot of code | |
any time we added a library, or come up with tedious prefixes to make our function | |
names unique. With namespaces, we can avoid the headache of naming collisions when | |
mixing third-party code with our own projects. |
Author
kirilkirkov
commented
Sep 14, 2016
testMe(); // Will output testMe() from first class
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment