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

时间:2012-02-24 11:20:23

标签: php netbeans doctrine-orm

我在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();上使用代码提示时,它不起作用。

使用here中的以下技巧,它可以工作:

/**
 * 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();

}

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

有人可以为此提供答案吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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();

    }
}