What is a Namespace in PHP?

What is a Namespace in PHP?

What is a Namespace in PHP?

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.

A namespace must be declared the namespace at the top of the file before any other code – with one exception: the declare keyword.

-Tip-

 

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();
?>

Aliasing in Namespaces

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