2012-02-24 85 views
1

我有一个Zend框架项目下面的类:Netbeans的自动完成不工作的自定义PHP类

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

} 

不过,我不希望有包括注释行,每次我实例化对象。当我尝试将它移到类定义 - 甚至是方法定义时,它无法工作。

任何人都可以为此提供答案?

回答

1

PHP是一种动态语言,因此它是不平凡的,从静态代码分析推断变量类型(如它是Java例如)。

这是一个与工厂方法像你getRepository('UserManagement\Users')尤其困难。

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

+0

谢谢,但我对你的回答感到困惑。是否可以通过操作Method DocBloc来让NetBeans识别User类? – Sjwdavies 2012-02-24 13:18:26

+0

不是在这种情况下,我很害怕。您需要记录getRepository始终返回用户存储库,但显然不是这样,并且会导致其他地方出现错误的typehints。 – Mchl 2012-02-24 13:51:42

+0

我想你会误解,$ user将等同于UserManagement \ Users对象的一个​​实例。上面的例子包括Doctrine2功能,但从本质上讲,$ user是用户对象的一个​​实例 - 不是存储库。 – Sjwdavies 2012-02-24 15:20:31

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

    } 
}