我在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();
}
但是,我不希望每次实例化对象时都必须包含该注释行。当我尝试将其移动到类定义 - 甚至是方法定义时,它无法工作。
有人可以为此提供答案吗?
答案 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();
}
}