2012-02-24 10 views
1

のために働いていない私は、Zend Frameworkプロジェクトに以下のクラスを持っている:私がしようとすると$user->getFullName();上のコードヒントを使用する場合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(); 

    } 
} 

はしかし、それは動作しません。

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

} 

をしかし、私は、オブジェクトをインスタンス化することコメント行毎回を含めるようにしたくない:hereから次のトリックを使用して

、それが動作します。これをクラス定義またはメソッド定義に移そうとすると、それは機能しません。

誰でもこれに対する回答を提供できますか?

答えて

1

PHPは動的言語であり、静的なコード分析(例えばJavaのようなもの)から変数型を推測するのは簡単ではありません。

あなたのような工場の方法では、特に難しいですgetRepository('UserManagement\Users')

現在のところ、NetBeansは、返された変数の型に関数の引数を変換する方法を知りません(親クラスに満足していない限り、そのファクトリから返されるすべてのサブクラスが派生します)。このような場合に対処するには不幸なvdocしかありません。

+0

ありがとうございますが、私はあなたの答えによって混乱しています。メソッドDocBlocを操作してNetBeansでUserクラスを認識させることは可能ですか? – Sjwdavies

+0

この場合、私は恐れています。 'getRepository'は常にユーザーリポジトリを返しますが、それは明らかに真実ではありませんが、他の場所で間違った型ヒントが返されることを文書化する必要があります。 – Mchl

+0

あなたが誤解していると思いますが、$ userはUserManagement \ Usersオブジェクトのインスタンスと同じです。上記の例はDoctrine2の機能を含みますが、基本的に$ userはリポジトリではなくユーザオブジェクトのインスタンスです。 – Sjwdavies

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

    } 
} 
関連する問題