2012-12-27 9 views
12

Ho un oggetto con getter e setter ma sto perdendo intellisense su quell'oggetto quando lo passo a una funzione o mentre sto scorrendo attraverso una matrice di questi oggetti .Come ottenere intellisense lavorando con phpStorm quando si passa da oggetto a funzione o iterando

Ad esempio:

... 
$personA = new Person(..); 
$age = $personA->getAge(); // intellisense works. 

$personArray = array($personA, $personB, ..); 
foreach($personArray as $aPerson){ 
    $aPerson->getAge(); // no intellisense here 
} 

doSomething($personA); 



function doSomething($person){ 
    $person->getAge()   // no intellisense here 
    ... 
} 

Che cosa mi manca qui?

Devo modificare il codice (casting, ecc.), Manca un'impostazione phpStorm? Forse non è possibile?

risposta

40

Per la prima foreach caso non è (ancora) possibile, fuori dalla scatola, ma in genere è possibile suggerire che:

$personArray = array($personA, $personB, ..); 
foreach ($personArray as $aPerson) { 
    /* @var $aPerson Person */ 
    $aPerson->getAge(); // now with code-completition 
} 

che sta facendo il tipo-hinting sulla variabile che sta prendendo l'iterazione . In alternativa si può anche fare il tipo-hinting sulla variabile array:

/* @var $personArray Person[] */ 
$personArray = array($personA, $personB, ..); 
foreach ($personArray as $aPerson) { 
    $aPerson->getAge(); // now with code-completition 
} 

Per il secondo caso, è possibile aggiungere PHP tipo-hinting (che raccomando):

function doSomething(Person $person) { 
    $person->getAge() // now with code-completition 
    ... 
} 

Questo assicura anche che puoi solo passare valori che sono di quel tipo. Vedi anche Type Hinting Docs e Interfaces Docs.

L'altra soluzione per il secondo caso è quello di documentare anche il parametro nella docblock della funzione:

/** 
* @param Person $person 
*/ 
function doSomething($person) { 
    $person->getAge() // now with code-completition 
    ... 
} 

alcune risposte correlate:

+0

Ha funzionato benissimo. Grazie, mi stava facendo impazzire! – RayLoveless

+0

Grazie .. mi fa risparmiare molto tempo. – Raj

Problemi correlati