2013-01-08 14 views
8

Diciamo che ho un modello di fabbrica tipico in codice PHP:codice di completamento e la fabbrica modello in Eclipse PDT

abstract class Model 
{ 
    function m() 
    { 
    } 
} 

class model_A 
{ 
    function a() 
    { 
    } 
} 

class model_B 
{ 
    function b() 
    { 
    } 
} 

function modelFactory($name) 
{ 
    $className = 'model_' . $name; 
    $object = new $className(); 
    // ... do some magic stuff ... 
    return $object; 
} 

che so sulla @var e tag PHPDoc @return, ma c'è un modo magico così dopo digitando questo:

$x = modelFactory('A'); 

Eclipse saprà $ x è un'istanza di model_A?

posso definire da qualche parte un vettore fisso di stringhe in questo modo:

"modelFactory('A')" => "new model_A()" 
"modelFactory('B')" => "new model_B()" 

per Eclipse per sostituire in memoria prima di elaborare con il completamento del codice.

+2

Perché vuoi questo? La factory dovrebbe restituire oggetti "simili", ad es. implementa la stessa interfaccia o estende la stessa super classe. – atomman

+0

sì, volevo che l'esempio fosse super semplificato. l'ho modificato ora e ho aggiunto la super classe. So che posso aggiungere @return Model sopra modelFactory ma è possibile ottenere sia m() che a() come un metodo hint per $ x – fsw

+0

anche: gran parte del mio progetto dipende dal modello di fabbrica e la mancanza di completamento del codice è così fastidioso avrò bisogno di refactoring se questo non è possibile. – fsw

risposta

0

i utilizzare Eclipse e PDT da quasi 3+ anni, ma non hanno risposta perfetta per la tua domanda

penso Zend Studio 9 è in grado di risolvere il problema, per il completamento del codice è molto più meglio di PDT.

http://www.zend.com/en/products/studio/downloads

+0

Hmm, potrei provare Zend. Ma perché pensi che gestirà? Stanno anche raccomandando @var per il modello di fabbrica http://forums.zend.com/viewtopic.php?f=59&t=5454 quindi immagino che non ci sia un modo magico per questo. – fsw

1

Risposta breve, questo non è possibile nel modo desiderato.

Come hai già giustamente sottolineato in un altro commento è necessario utilizzare @var manualmente per realizzare il completamento del codice bontà, perché è impossibile per l'editor per capire il concetto di modelli di programmazione per sé

Anche se teoricamente possibile, manualmente le regole di authoring per l'inferenza di tipo sembrano solo indietro imho (per non parlare delle modifiche richieste alla notazione Docblock stessa).

Problemi correlati