2012-12-27 12 views
12

Mam obiekt z pobierającymi i ustawiającymi, ale tracę intellisense na tym obiekcie, gdy przekazuję go do funkcji lub podczas iteracji przez tablicę tych obiektów .Jak uzyskać intellisense pracy z phpStorm podczas przekazywania obiektu do funkcji lub iterowania

Na przykład:

... 
$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 
    ... 
} 

Co ja tu brakuje?

Czy muszę zmienić kod (przesyłanie ... itp.), Brakuje ustawienia phpStorm? Może to nie jest możliwe?

Odpowiedz

40

Dla pierwszego foreach przypadku nie jest (jeszcze) możliwe po wyjęciu z pudełka, jednak można zazwyczaj napomknąć, że:

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

Który robi typu podpowiedzi na zmiennej, która bierze iteracji . Alternatywnie można też zrobić badania typu, sugerując na zmiennej tablicy:

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

Dla drugiego przypadku, można dodać PHP typu podpowiedzi (co polecam):

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

Zapewnia również, że możesz przekazywać tylko wartości tego typu. Zobacz także Type Hinting Docs i Interfaces Docs.

Innym rozwiązaniem dla drugiego przypadku jest również udokumentowanie parametr w bloku dokumentacyjnym funkcji:

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

Niektóre Powiązane odpowiada:

+0

Pracował świetnie. Dzięki, doprowadziło mnie to do szału! – RayLoveless

+0

Dzięki ... oszczędzam mnóstwo czasu. – Raj

Powiązane problemy