Автозаполнение Netbeans не работает для пользовательского класса PHP - PullRequest
1 голос
/ 24 февраля 2012

У меня есть следующий класс в проекте 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();

}

Но я не хочу включать эту строку комментария каждый раз, когда создаю экземпляр объекта. Когда я пытаюсь переместить это в определение класса - или даже в определение метода, оно не работает.

Кто-нибудь может дать ответ на этот вопрос?

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

PHP - это динамический язык, и поэтому нетрудно вывести типы переменных из статического анализа кода (как, например, в Java).

Это особенно сложно с заводскими методами, такими как ваш getRepository('UserManagement\Users').

В настоящее время NetBeans не может знать, как преобразовать аргумент функции в тип возвращаемой переменной (если вы не удовлетворены каким-либо родительским классом, из которого все подклассы возвращаются этой фабрикой).К сожалению, vdoc - единственный способ справиться с такими случаями.

0 голосов
/ 27 февраля 2012

Создайте метод в 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();

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...