2013-02-26 4 views
5

C'è un modo per fare un "uso multiplo"?"use" istruzione php multiple?

Sto utilizzando un plugin in Silex da usare ORM con esso, e in ogni Entità devo fare un uso del genere:

use Doctrine\ORM\Mapping\Entity, 
    Doctrine\ORM\Mapping\Table, 
    Doctrine\ORM\Mapping\Id, 
    Doctrine\ORM\Mapping\Column, 
    Doctrine\ORM\Mapping\GeneratedValue, 
    Doctrine\ORM\Mapping\ManyToOne, 
    Doctrine\ORM\Mapping\ManyToOne; 

Quindi, la mia domanda è: esiste in PHP una " multipla usando "come Java? Voglio dire:

use Doctrine\ORM\Mapping\*; 

O forse utilizzando una tecnica autoload fatta da Silex/Symfony o qualcosa del genere?

risposta

2

No, questo non è possibile - dal design.

Immaginate, avete due "jolly" utilizza, in questo modo:

use Foo\*; 
use Bar\*; 

Ora, da qualche parte nel codice, si sarebbe accede a una classe di uno di quegli spazi, in questo modo:

$a = new Something(); 

Ora, la classe Something deve probabilmente essere caricata automaticamente, ma per farlo, php dovrebbe risolvere il percorso completo dello spazio dei nomi della classe: Foo\Something o Bar\Something? O intendevamo la classe Something all'interno dello spazio dei nomi corrente?

+0

beh, in che modo altri linguaggi (come Java) risolvono questo problema? – r1pp3rj4ck

+0

Facile: Java non ha questo tipo di funzionalità di autoloading. –

5

Perché non fare questo ...

use Doctrine\ORM\Mapping as ORM;

Poi le annotazioni ...

/** 
* @ORM\Column(type="int") 
*/ 
protected $name; 

E così via ...

+0

Su Symfony funziona, ma non in Silex ... dice qualcosa come "non è un'entità di mappatura valida" .. – mowcixo

+2

@ user2111499 dovrebbe funzionare ovunque, in quanto è una funzionalità PHP. Puoi mostrare un po 'di codice? –

+0

@ user2111499 hai aggiunto '@ORM \ Entity' alle annotazioni sulla classe? – JamesHalsall