问题
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.
回答1:
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).
回答2:
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.
回答3:
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.
回答4:
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"} */
回答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;
来源:https://stackoverflow.com/questions/1798477/variable-type-hinting-in-netbeans-php