Variable type hinting in Netbeans (PHP)

PhpPhpdocPhp Ide

Php Problem Overview


Just curious if there's a way in netbeans to give type hints for regular variables, so that intellisense picks it up. I know you can do it for class properties, function parameters, return types, etc. but I can't figure out how to do it for regular variables. It's something that would really help in situations where you have a method that can return different object types (like a service locator).

ex something like:

/**
 * @var Some_Service $someService
 */
$someService = ServiceLocator::locate('someService');

Where using $someService afterward, netbeans would provide all available methods defined in the class Some_Service.

Php Solutions


Solution 1 - Php

A single line is all you need:

/* @var $varName Type_Name */

See this article in the NetBeans PHP Blog: https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

>Note: At least, in version 8.2; The key seems to be: > > - The single asterisk (/* instead of /**). > - Placing the type after the variable name. > - Having nothing before and after the type-hinting > (except white-space, but even that is not allowed > when the comment is not in a single line).

Solution 2 - Php

I know this is an older question, but I was looking for a similar answer for Eclipse/Zend Studio and this solved it as well.

**Note though that it must be on a single line with the opening and closing explicitly in this style...

/* @var $varName Type_Name */

No other formats whether...

/**
 * @var $varName Type_Name
 */ 

or...

// @var $varName Type_Name

seemed to work at all. Hope that helps someone.

Solution 3 - Php

Are you looking to document those pesky magic variables? (I did; This question currently ranks top result for that in Google. I hope this helps someone!)

The @property tag allows you to document magic php variables - those implemented using __get() and __set(). The tag should be used in the documentation immediately preceding the class definition:

/**
 * Class Contact
 * @property string $firstName
 * @property string $lastName
 */
class Contact extends Model {
   ...

This notation triggers autocomplete, tested in Netbeans 8.1 and PhpStorm 2016.1.

enter image description here

Solution 4 - Php

According to this bug report, the syntax will change in NetBeans 9:

/* @var $variable VarType */    // vdoc1 (legacy syntax)
/** @var VarType $variable */   // vdoc (new syntax)

Also, it's worth mentioning that you can append [] to a class name to indicate an array of objects:

/* @var $foos Foo[] */
$foos = // ...

foreach ($foos as $foo) {
    // $foo will be hinted as Foo here
}

And don't forget your use statement, e.g. use Foo;

Solution 5 - Php

In netbeans 8.0.2, the vdoc template gives you this:

/* @var $variable type */

Netbeans will not recognize this however, and will not give you the correct autocomplete list for your objects. Instead use this, just before your variable declaration :

/** @var objectType $varName */

I have not really seen a great use for the stock vdoc Template, especially for class variables that are going to be used as PDO or PDOStatement objects.

One solution I use is actually to go into Tools / Options / Editor / Code Templates (with PHP selected as your Language), and add a new Template. I called mine hint . Then under Expanded Text, use the following template:

/** @var ${VAR_TYPE variableFromNextAssignmentType default="ClassName"} $$${VARIABLE variableFromNextAssignmentName default="variable"} */

Solution 6 - Php

For NetBeans IDE 8.2 syntax is like this:

class foobar{
    /** @var string $myvar: optional description here **/
    protected static $myvar;
}

This will provide the type hints properly for static variables at least.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionrr.View Question on Stackoverflow
Solution 1 - PhpjohannesView Answer on Stackoverflow
Solution 2 - PhpoucilView Answer on Stackoverflow
Solution 3 - PhpGHHView Answer on Stackoverflow
Solution 4 - Phprybo111View Answer on Stackoverflow
Solution 5 - PhpMikeView Answer on Stackoverflow
Solution 6 - PhpandreszsView Answer on Stackoverflow