在PHP中为Netbeans自动完成类型转换用户定义的对象

在PHP中为Netbeans自动完成类型转换用户定义的对象,php,netbeans,netbeans-7,Php,Netbeans,Netbeans 7,我知道这个问题已经被问过很多次了,但在我的例子中,这只是为了方便在Netbeans中编写代码。我一直在使用PHPExcel库,因为它有太多的方法,我不可能记住所有的方法。所以我需要netbeans的自动完成功能。问题是,netbeans只能在一定程度上自动完成 例如:- protected function _read_excel(PHPExcel $excel) { $sheet = $excel->getSheet(0); // Works perfectly fine h

我知道这个问题已经被问过很多次了,但在我的例子中,这只是为了方便在Netbeans中编写代码。我一直在使用PHPExcel库,因为它有太多的方法,我不可能记住所有的方法。所以我需要netbeans的自动完成功能。问题是,netbeans只能在一定程度上自动完成

例如:-

protected function _read_excel(PHPExcel $excel)
{
    $sheet = $excel->getSheet(0);   // Works perfectly fine here because I type cast the argument
    $rows = $sheet->getRowIterator(); // Works fine here too
    foreach($rows as $row) 
    {
        $cols = $row->getCellIterator(); // By the time I reach here, Netbeans stops auto-completing. Probably due to Netbeans don't know what class it is.
    }
}
如果我能做到这一点:-

$cols = (PHPExcel_Worksheet_CellIterator) $row->getCellIterator();

我知道PHP无法做到这一点,但有解决办法吗?

您需要开始使用类型注释对代码进行注释,Netbeans将使用它们自动完成

protected function _read_excel(PHPExcel $excel)
{
    $sheet = $excel->getSheet(0);   // Works perfectly fine here because I type cast the argument
    $rows = $sheet->getRowIterator(); // Works fine here too
    foreach($rows as $row) 
    {
        /**
         * @var PHPExcel_Worksheet_CellIterator $cols
         */
        $cols = $row->getCellIterator(); // Now netbeans will know what class it is.
    }
}
如果愿意,也可以使用“内联”docblock:-

/** @var PHPExcel_Worksheet_CellIterator $cols */
或者,在最新版本的NetBeans中,顺序相反,并且少了一个*

/* @var $cold PHPExcel_Worksheet_CellIterator */

但是,您必须确保netbeans知道在哪里可以找到PHPExcel。如果您需要,我的回答会提供一些指导。

您需要开始使用类型注释对代码进行注释,Netbeans将使用它们自动完成

protected function _read_excel(PHPExcel $excel)
{
    $sheet = $excel->getSheet(0);   // Works perfectly fine here because I type cast the argument
    $rows = $sheet->getRowIterator(); // Works fine here too
    foreach($rows as $row) 
    {
        /**
         * @var PHPExcel_Worksheet_CellIterator $cols
         */
        $cols = $row->getCellIterator(); // Now netbeans will know what class it is.
    }
}
如果愿意,也可以使用“内联”docblock:-

/** @var PHPExcel_Worksheet_CellIterator $cols */
或者,在最新版本的NetBeans中,顺序相反,并且少了一个*

/* @var $cold PHPExcel_Worksheet_CellIterator */

但是,您必须确保netbeans知道在哪里可以找到PHPExcel。如果你需要的话,我的回答会给你一些指导。

谢谢@vascowhite给我的启发

因此,为了其他人,要在注释中声明变量(在Netbeans中),只需键入
vdoc
,然后键入TAB键

基于此,格式实际上是
@var$variablename ClassName
。 另外,对于
foreach
循环,必须在循环外部声明变量

例如:

protected function _read_excel(PHPExcel $excel)
{
    $sheet = $excel->getSheet(0);   // Works perfectly fine here because I type cast the argument
    $rows = $sheet->getRowIterator(); // Works fine here too
    /* @var $row PHPExcel_Worksheet_Row */
    foreach ( $rows as $row )
    {
        /* @var $cols PHPExcel_Worksheet_CellIterator */
        $cols = $row->getCellIterator(); // Now netbeans will know what class it is.
    }
}

谢谢@vascowhite给我的启发

因此,为了其他人,要在注释中声明变量(在Netbeans中),只需键入
vdoc
,然后键入TAB键

基于此,格式实际上是
@var$variablename ClassName
。 另外,对于
foreach
循环,必须在循环外部声明变量

例如:

protected function _read_excel(PHPExcel $excel)
{
    $sheet = $excel->getSheet(0);   // Works perfectly fine here because I type cast the argument
    $rows = $sheet->getRowIterator(); // Works fine here too
    /* @var $row PHPExcel_Worksheet_Row */
    foreach ( $rows as $row )
    {
        /* @var $cols PHPExcel_Worksheet_CellIterator */
        $cols = $row->getCellIterator(); // Now netbeans will know what class it is.
    }
}

嘿这真的很有帮助。谢谢我还发现,
vdoc
后跟TAB键是声明变量的快捷方式。嘿。。。。这真的很有帮助。谢谢我还发现,
vdoc
后跟TAB键是声明变量的快捷方式。这样做的问题是,它只适用于netbeans,如果将来更改IDE,则必须更改所有docblock。大多数(如果不是全部的话)当前的PHP IDE都理解标准的docblocks注释格式。我明白你的意思,因为标准PHPDocs总是
类型
,然后是
变量
。我只需要修改
vdoc
then.Update的netbeans代码模板。我刚刚尝试使用PHPDocs约定(
type
varname
),但它不起作用。因此,我切换回netbeans约定(
varname
type
),它工作正常。我使用的是Netbeans 7.3,正是这样的问题让我转而使用PHPStorm:)这样做的问题是,它只适用于Netbeans,如果将来更改IDE,则必须更改所有的docblock。大多数(如果不是全部的话)当前的PHP IDE都理解标准的docblocks注释格式。我明白你的意思,因为标准PHPDocs总是
类型
,然后是
变量
。我只需要修改
vdoc
then.Update的netbeans代码模板。我刚刚尝试使用PHPDocs约定(
type
varname
),但它不起作用。因此,我切换回netbeans约定(
varname
type
),它工作正常。我使用的是Netbeans 7.3,正是这样的问题让我转而使用PHPStorm:)