2010-08-10 10 views
20

Estoy tratando de usar espacios de nombres. Quiero extender una clase dentro de un espacio de nombres diferente. El nombre de la clase es el mismo. Ejemplo:Ampliando una clase con otro espacio de nombres con el mismo nombre de clase

Padres:

namespace Base; 

class Section extends Skeleton { 

protected $id; 

protected $title; 

protected $stylesheet; 
} 

niño:

namespace Base2; 
use \Base\Section; 

class Section 
    extends \Base\Section { 

} 

Es una aplicación que utiliza Doctrina 2 y Zend Framework. La clase Skeleton utilizada por Base/Section es solo una clase abstracta que contiene los métodos mágicos (__get, _set, etc.).

Cuando intento crear una instancia de una clase Sección \ Base2 \ arroja un error:

Fatal error: Cannot declare class Base2\Section because the name is 
already in use in /var/www/test/application/Models/Base2/Section.php 
on line 7 

Cualquier idea?

+0

¿No es un poco confuso tener ese esquema de nombres? –

+0

Sí, lo es, pero no es el verdadero esquema de nombres. Solo la parte de la Sección es real. Los espacios de nombres son solo aleatorios. –

+1

@Rene: ¿Estás seguro de que no son en realidad _arbitrary_? –

Respuesta

40

sólo tiene que utilizar el nombre completo

namespace Base2; 

class Section 
    extends \Base\Section { 
} 

O aliasing

namespace Base2; 
use \Base\Section as BSection; 

class Section 
    extends BSection { 
} 
+0

¡Esto funciona para mí! –

9

cuando dice

use \Base\Section 

que están tirando de la clase Sección en su ámbito actual, provocando un conflicto cuando Quieres crear una nueva clase llamada Sección. solo omite la declaración de uso.

Cuestiones relacionadas