PHP Namespaces are the way of encapsulating items so that same names can be reused without name conflicts.
– It can be seen as an abstract concept in many places. It allows redeclaring the same functions/classes/interfaces/constant functions in the separate namespace without getting the fatal error.
– A namespace
is a hierarchically labeled code block holding a regular PHP code.
– A namespace
can contain valid PHP code.
– Namespace affects following types of code: classes (including abstracts and traits), interfaces, functions, and constants.
– Namespaces are declared using the namespace keyword.
A namespace must be declared the namespace at the top of the file before any other code – with one exception: the declare keyword.
Example:
<?php
namespace MyNamespaceName {
// Regular PHP code
function hello()
{
echo 'Hello I am Running from a namespace!';
}
}
?>
– If namespace
is declared globally, then declare it without any name like this:
<?php
namespace {
// Global space!
}
?>
– Multiple namespaces can be declared within a single PHP code:
<?php
namespace MyNamespace1 {
}
namespace MyNamespace2 {
}
namespace {
}
?>
A namespace
is used to avoid conflicting definitions and introduce more flexibility and organization in the code base. Just like directories, namespace
can contain a hierarchy know as subnamespaces.
– PHP uses the backslash( \
) as its namespace separator.
Example:
<?php
namespace MyNamespaceName;
function hello()
{
echo 'Hello I am Running from a namespace!';
}
// Resolves to MyNamespaceName\hello
hello();
// Explicitly resolves to MyNamespaceName\hello
namespace\hello();
?>
Importing is achieved by using the ‘use
’ keyword. Optionally, It can specify a custom alias with the ‘as
’ keyword.
Example:
<?php
namespace MyNamespaceName;
require 'project/database/connection.php';
use Project\Database\Connection as Connection;
$connection = new Connection();
use Project\Database as Database;
$connection = new Database\Connection();
?>
– It is possible to dynamically call namespaced code, dynamic importing is not supported.
Example:
<?php
namespace OtherProject;
$title = 'xdevspace';
// This is valid PHP
require 'project/blog/title/' . $title . '.php';
// This is not
use Project\Blog\title\$title;
?>
All Comments