SunshinePHP Developer Conference 2015

Visión general de los espacios de nombres

(PHP 5 >= 5.3.0)

¿Qué son los espacios de nombres? En su definición más amplia los espacios de nombres son una manera de encapsular elementos. Se puede ver como un concepto abstracto en muchos aspectos. Por ejemplo, en cualquier sistema operativo los directorios sirven para agrupar ficheros relacionados, y actúan como espacios de nombres para los ficheros que hay en ellos. Como ejemplo, el fichero foo.txt puede existir en los directorios /home/greg y /home/otro, pero no pueden existir dos copias de foo.txt en el mismo directorio. Además, para acceder al fichero foo.txt fuera del directorio /home/greg se debe añadir el nombre del directorio delante del nombre del fichero usando el separador de directorios para obtener /home/greg/foo.txt. Este mismo principio se extiende a los espacios de nombres en el mundo de la programación.

En el mundo de PHP, los espacios de nombres están diseñados para solucionar dos problemas que los autores de bibliotecas y aplicaciones se encuentran cuando crean elementos de código reusable tales como clases o funciones:

  1. El conflicto de nombres entre el código que se crea y las clases/funciones/constantes internas de PHP o las clases/funciones/constantes de terceros.
  2. La capacidad de apodar (o abreviar) Nombres_Extra_Largos diseñado para aliviar el problema en primer lugar, mejorando la legibilidad del código fuente.

Los espacios de nombres en PHP proporcionan una manera para agrupar clases, interfaces, funciones y constantes relacionadas. Un ejemplo de la sintaxis de los espacios de nombres de PHP:

Ejemplo #1 Ejemplo de sintaxis de espacios de nombres

<?php
namespace mi\nombre// véase la sección "Definir Espacios de Nombres"

class MiClase {}
function 
mifunción() {}
const 
MICONSTANTE 1;

$a = new MiClase;
$c = new \mi\nombre\MiClase// véase la sección "Espacio Global"

$a strlen('hola'); // véase la sección "Usar espacios de nombres: una alternativa a
                     // funciones/constantes globales"

$d = namespace\MICONSTANTE// véase la sección "El operador namespace y
                            // la constante __NAMESPACE__"
$d __NAMESPACE__ '\MICONSTANTE';
echo 
constant($d); // véase la sección "Espacios de Nombres y características dinámicas del lenguaje"
?>

Nota:

Los nombres de espacio de nombres PHP y php, y los nombres compuestos a partir de estos nombres (como PHP\Classes) están reservados para el uso del lenguaje interno y no deben ser utilizados en el código.

add a note add a note

User Contributed Notes 3 notes

up
156
SteveWa
3 years ago
Thought this might help other newbies like me...

Name collisions means:
you create a function named db_connect, and somebody elses code that you use in your file (i.e. an include) has the same function with the same name.

To get around that problem, you rename your function SteveWa_db_connect  which makes your code longer and harder to read.

Now you can use namespaces to keep your function name separate from anyone else's function name, and you won't have to make extra_long_named functions to get around the name collision problem.

So a namespace is like a pointer to a file path where you can find the source of the function you are working with
up
65
Dmitry Snytkine
3 years ago
Just a note: namespace (even nested or sub-namespace) cannot be just a number, it must start with a letter.
For example, lets say you want to use namespace for versioning of your packages or versioning of your API:

namespace Mynamespace\1;  // Illegal
Instead use this:
namespace Mynamespace\v1; // OK
up
11
php dot net at e-z dot name
11 months ago
php namespaces are case-insensitive:

file1.php:
<?php
namespace foo;

function
bar()
{
    echo
'from bar';
}

?>

file2.php:
<?php

fOo
\bar() // output: from bar

?>
To Top