我在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();
}
但是,我不想每次实例化对象时都包含注释行。当我试图将其移动到类定义,甚至方法定义时,它都无法工作。
有人能对此提供答案吗?
PHP是一种动态语言,因此,从静态代码分析中推断变量类型并非易事(例如,在Java中)。
使用像您的getRepository('UserManagement'Users')
这样的工厂方法尤其困难。
NetBeans目前无法知道如何将函数参数转换为返回变量的类型(除非您对某个父类感到满意,该工厂返回的所有子类都是从该父类派生的)。不幸的是,vdoc是处理此类案件的唯一途径。
在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();
}
}