2010-11-11 25 views
21

He estado buscando sitios web para intentar manejar los espacios de nombres PHP, pero todos parecen bastante vagos, pero lo que están tratando de hacer es fácil de entender.Uso de espacios de nombres PHP

Mi pregunta es: Tengo un archivo llamado people.php y en él se define la clase llamada people. Si creo otro archivo llamado managers.php en la misma carpeta, ¿puedo definir una clase nuevamente llamada people que amplíe la clase original people pero en el espacio de nombres de managers, si es así tengo que 'incluir' el people.php original y en caso afirmativo pongo el incluir después de la escritura: namespace managers?

+3

Una cosa a tener en cuenta que los espacios de nombres en PHP no refleja la estructura de directorios. Debe mapear manualmente su estructura de directorio con sus nombres de espacio de nombres. – Extrakun

+0

[Este] (http://www.sitepoint.com/php-53-namespaces-basics/) sería un gran recurso para borrar todo lo que necesita saber sobre espacios de nombres PHP. –

Respuesta

4
// people.php 
<?php 
namespace People; 

class People {} 


// managers.php 
<?php 
namespace Managers; 

require_once __DIR__.'/people.php'; 

class People extends \People\People {} 
31

Los espacios de nombre son una forma de agrupar sus clases relacionadas en paquetes. Lo que usted describe mejor podría ser puesto bajo un único espacio de nombres como

<?php // people.php 
namespace com\example\johnslibrary\people; 
abstract class People { 

} 

y luego

<?php // manager.php 
namespace com\example\johnslibrary\people; 
require_once 'path/to/People.php'; // can better use autoloading though 
class Manager extends People { 

} 

porque un Manager es una subclase de personas, por lo que no es mucho de una razón para ponerlos en su propio espacio de nombres. Son personas especializadas.

Si desea que los Managers estén en su propio espacio de nombres, puede hacerlo, pero tiene que usar el nombre completo al usar la palabra clave extends, p.

<?php // manager.php 
namespace com\example\johnslibrary\managers; 
require_once 'path/to/People.php'; 
class Manager extends \com\example\johnslibrary\people\People { 

} 

o importar la clase de gente primera

<?php // manager.php 
namespace com\example\johnslibrary\managers; 
use com\example\johnslibrary\People as People; 
require_once 'path/to/People.php'; 
class Manager extends People { 

} 

See the PHP Manual on Namespaces for extensive documentation.

0

tengo edad Clase PHP y tengo que usarlo en nuevo archivo PHP como por ejemplo: index.php tiene que utilizar iClass.php. Pero antes de usar el VIEJO iClass.php tengo que modificarlo como se muestra a continuación, para poder usarlo en index.php.

iClass.php:

namespace ic; 
class iClass { 
    public static function callMeFromClass() { 
    echo 'OK - you have called me!'; 
    exit; 
    } 
} 

index.php

namespace inex; 
require_once 'iClass.php'; 
use ic\iClass; 
iClass::callMeFromClass(); 
Cuestiones relacionadas