Open In App

PHP | Namespace

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Like C++, 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. 
 

php




<?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. 
 

php




<?php
namespace {
  
    // Global space!
}
?>


Multiple namespaces can be declared within a single PHP code. 
 

php




<?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




<?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




<?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. 
 

php




<?php
namespace OtherProject;
   
$title = 'geeks';
   
// This is valid PHP
require 'project/blog/title/' . $title . '.php';
   
// This is not
use Project\Blog\title\$title;
?>


Reference : http://php.net/manual/en/language.namespaces.php
 



Last Updated : 04 Oct, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads