2012-12-27 1 views
12

Ich habe ein Objekt mit Getter und Setter, aber ich verlieren Intellisense für dieses Objekt, wenn ich es an eine Funktion übergeben oder während durch ein Array dieser Objekte iterieren .Wie intellisense funktioniert mit phpStorm beim Übergeben von Objekt an Funktion oder Iterieren

Zum Beispiel:

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

Was ich hier fehlt?

Muss ich den Code ändern (Casting ... etc), fehlt eine phpStorm Einstellung? Vielleicht ist es nicht möglich?

Antwort

40

Zum ersten foreach Fall ist es (noch) nicht möglich, aus der Box Sie in der Regel können, ist jedoch andeuten, dass:

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

die den Typ-Hinting auf die Variable ist zu tun, dass die Iteration nimmt . Alternativ können Sie auch die Typ-Hinting tun auf den Array-Variablen:

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

Damit ist auch sichergestellt, dass:

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

Für Ihren zweiten Fall können Sie PHP-Typ-Hinting (was ich empfehle) hinzufügen Sie können nur Werte dieses Typs übergeben. Siehe auch Type Hinting Docs und Interfaces Docs.

Die andere Lösung für den zweiten Fall ist auch die Parameter in der Docblock der Funktion zu dokumentieren:

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

Einige Verwandte Antworten:

+0

Großartig gearbeitet. Danke, das hat mich verrückt gemacht! – RayLoveless

+0

Danke .. es spart mir viel Zeit. – Raj

Verwandte Themen