2012-02-24 90 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(); 

    } 
}