2010-08-10 11 views
20

Sto tentando di utilizzare gli spazi dei nomi. Voglio estendere una classe all'interno di un diverso spazio dei nomi. Il nome della classe è lo stesso. Esempio:Estensione di una classe con un altro spazio dei nomi con lo stesso ClassName

Parent:

namespace Base; 

class Section extends Skeleton { 

protected $id; 

protected $title; 

protected $stylesheet; 
} 

bambino:

namespace Base2; 
use \Base\Section; 

class Section 
    extends \Base\Section { 

} 

Si tratta di un'applicazione che utilizza Doctrine 2 e Zend Framework. La classe Skeleton usata da Base/Section è solo una classe astratta che contiene i metodi magici (__get, _set, ecc.).

Quando cerco di istanziare una classe Sezione \ Base2 \ getta un errore:

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 

Qualsiasi idea di?

+0

Non è un po 'di confusione avere uno schema di denominazione simile? –

+0

Sì, lo è, ma non è il vero schema di denominazione. Solo la parte Sezione è reale. Gli spazi dei nomi sono solo casuali. –

+1

@Rene: Sei sicuro che non siano invece _arbitrary_? –

risposta

40

Basta utilizzare il nome completo

namespace Base2; 

class Section 
    extends \Base\Section { 
} 

O aliasing

namespace Base2; 
use \Base\Section as BSection; 

class Section 
    extends BSection { 
} 
+0

Thnx, questo funziona per me! –

9

quando dici

use \Base\Section 

si sta tirando la classe sezione nel vostro ambito corrente, provocando un conflitto quando vuoi creare una nuova classe chiamata Sezione. basta omettere la dichiarazione di utilizzo.

Problemi correlati