Netbeans自动完成不适用于自定义PHP类


Netbeans Auto-Complete Not Working For Custom PHP Class

我在Zend Framework项目中有以下类:

<?php
/**
 * User's class
 *
 * This class should be responsible for all 
 * 
 * @author     Steve Davies
 * @copyright  2012
 * @version    SVN: $Id$
 */
class Api_Admin_Users extends Api_Core
{
    /**
     * Class Constructor
     *
     * @return void
     */
    public function __construct() {
        parent::__construct();
    }
    /**
     * Get User's name
     *
     * This returns the user's name
     *
     * @return void
     */
    public function new() {
        $user = self::_instance()->_em->getRepository('UserManagement'Users')->find('1');
        echo $user->getFullName();
    }
}

然而,当我尝试在$user->getFullName();上使用代码提示时,它不起作用。

从这里使用以下技巧,它可以工作:

/**
 * Get User's name
 *
 * This returns the user's name
 *
 * @return void
 */
public function new() {
    /* @var $user 'UserManagement'Users */
    $user = self::_instance()->_em->getRepository('UserManagement'Users')->find('1');
    echo $user->getFullName();
}

但是,我不想每次实例化对象时都包含注释行。当我试图将其移动到类定义,甚至方法定义时,它都无法工作。

有人能对此提供答案吗?

PHP是一种动态语言,因此,从静态代码分析中推断变量类型并非易事(例如,在Java中)。

使用像您的getRepository('UserManagement'Users')这样的工厂方法尤其困难。

NetBeans目前无法知道如何将函数参数转换为返回变量的类型(除非您对某个父类感到满意,该工厂返回的所有子类都是从该父类派生的)。不幸的是,vdoc是处理此类案件的唯一途径。

Api_Admin_Users中创建一个方法来访问存储库,并在其中添加类型提示。这将有利于类中的所有方法。只要存储库中的方法类型提示正确,您就可以完成所有操作。

class Api_Admin_Users extends Api_Core
{
    /**
     * Class Constructor
     *
     * @return void
     */
    public function __construct() {
        parent::__construct();
    }
    /**
     * Get the repository
     *
     * @return 'UserManagement'Users
     */
    public static function getRepository() {
        return self::_instance()->_em->getRepository('UserManagement'Users');
    }
    /**
     * Get User's name
     *
     * This returns the user's name
     *
     * @return void
     */
    public function new() {
        $user = self::getRepository()->find('1');
        echo $user->getFullName();
    }
}