Variable type hinting in Netbeans (PHP)
Asked Answered
S

6

91

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.

Seepage answered 25/11, 2009 at 17:16 Comment(2)
This works inside a class, for members, but I don't know how to do it in functions or procedural code.Boston
I'd think about renaming this to Variable type hinting in PHP IDEs as this type of comment should work in all common IDEs (NEtBeans, Eclipse, ...).Graziano
P
191

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).
Pacifier answered 25/11, 2009 at 17:57 Comment(9)
The key here seems to be the single asterisk /* instead of /**. At least, in version 8.0. Thanks.Exposure
Seems not to work at all if we need to use vdoc for object property, i.e. for $this->obj = $serviceLocator->get('obj'); if I use /* @var $obj Obj */ it doesn't work...Graziano
@Graziano In this case you should use /** @var Type_Name */, see this post?Philately
Remember that you can type vdoc on the line above the variable you're going to document and then hit Tab and that will act as a macro to automatically create the doc block @Pacifier posts above.Minneapolis
still seeing PHPDoc not found :(Predicative
Long shot, but do you know if for the type there's anyway to use a variable? E.g. I have a variable that could be either My_Class_One, or My_Class_Two, initialized like $class = new $myClass();, and I'd like to be able to hint like /* @var $class $myClass */Pringle
Sorry to update the old topic, but does anyone know if it's possible to vdoc multiple variables in a single comment? 'couse a lot of consequed comment lines like /* @var ... ... */ /* @var ... ... */ doesn'n look good when i'm pointing the incoming variables which are defined in another file.Jeaninejeanlouis
If you want NetBeans to support alternative syntaxes as well, please comment/vote on the feature request: netbeans.org/bugzilla/show_bug.cgi?id=267470Tetramethyldiarsine
Visual Studio Code syntax. /** @var ClassName $yourVaribleName */ Works single and multiline.Jamnes
T
24

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.

Toy answered 4/9, 2012 at 20:0 Comment(3)
Using the double slash method listed last did not work for me in NetBeans 7.2Twocycle
@Twocycle It may not read that well, but I did say that ONLY the first works. Although both of the others are valid comments, neither of them work with the type hinting system, at least as far as eclipse goes, not sure about NetBeans.Toy
Netbeans (8.01) only accepts the first option, using /*, but phpStorm (8) supports /** as well.Quietude
W
11

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

Wahhabi answered 11/5, 2016 at 10:37 Comment(0)
R
5

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;

Reboant answered 27/1, 2018 at 10:58 Comment(1)
Thaaat's why. Thanks- this worked for me.Sixth
M
2

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"} */
Mancilla answered 28/3, 2015 at 19:30 Comment(2)
Hm, I have NB 8.0.2 and for me it's the other way around. The /* @var $variable type */ works fine. I did try to use your patch for the Templates. but it didn't work.Napoleonnapoleonic
I'm not sure exactly what was going on with my copy of netbeans when I first posted this answe, but I'm using 8.2 now. /* @var $varName varType */ works just fine.Mancilla
J
0

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.

Josettejosey answered 9/10, 2020 at 13:45 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.