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


Type casting user defined object in PHP for Netbeans auto completion

我知道这个问题已经被问过很多次了,但在我的情况下,这只是为了方便在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不能这样做,但是有解决这个问题的方法吗?

你需要开始使用PHPDoc类型的注释来注释你的代码,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.
    }
}

如果你愿意,你也可以使用'inline' 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.
    }
}