Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get intellisense working with phpStorm when passing object to function or iterating

I have an object with getters and setters but I'm loosing intellisense on that object when I pass it to a function or while iterating through a array of these objects.

For example:

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

What am I missing here?

Do I need to make a change to code(casting.. etc), Missing a phpStorm setting? Maybe it's not possible?

like image 819
RayLoveless Avatar asked Dec 27 '12 18:12

RayLoveless


1 Answers

For the first foreach case it is not (yet) possible out of the box, however you can typically hint that:

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

Which is doing the type-hinting on the variable that is taking the iteration. Alternatively you can also do the type-hinting on the array variable:

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

For your second case, you can add PHP type-hinting (which I recommend):

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

This also ensures that you can only pass values that are of that type. See as well Type Hinting Docs and Interfaces Docs.

The other solution for the second case is to also document the parameter in the docblock of the function:

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

Some Related Answers:

  • Is there a way to make PhpStorm's autocomplete “go deeper”?
  • PHPStorm and magic methods
  • How do I make my PHP IDE understand Dependency Injection Containers?
like image 113
hakre Avatar answered Oct 03 '22 06:10

hakre