我有一个类Abc
和方法(正文并不重要):
/**
* @return SomeBaseClass
*/
function getAll() { ... }
在名为Abc
的{{1}}子类中,我想重新定义返回类的类型,以便在Netbeans中正确查看它。如果不重新定义方法,我可以这样做:
AbcChild
答案 0 :(得分:7)
答案 1 :(得分:0)
不,因为您需要子方法代码本身才能让子docblock与其关联。如果您有docblock而不是方法代码,那么docblock将不会绑定任何内容,因此不起作用。大多数人不喜欢改变他们的代码以适应docblock行为,尽管这样做从来没有让我感到困扰。
但是,另一个选项是调整父方法的@return标记,以便列出要指示子项可以返回的所有可能的返回类型。这让我很奇怪,但是......如果你实际上没有覆盖方法本身,那么子类实际上如何返回与父类不同的类?我可以在脑海中看到这样做的方法,涉及包含不同类对象的类属性,但是他们觉得代码闻起来对我来说; - )
如果子节点中没有方法覆盖代码本身,那么我会选择将所有可能的返回类型放在父级的@return中。
答案 2 :(得分:0)
实际上我认为除了完整方法覆盖之外还有其他方法。您可以在扩展基接口的子接口中更改@return phpdoc块。让我用代码解释一下我的意思:
interface EntityRepository
{
/**
* @return object
*/
public function get($id);
public function add($entity, $sync = false);
public function remove($entity, $sync = false);
// other methods common for custom repositories
}
interface ProjectRepository extends EntityRepository
{
/**
* @return Project
*/
public function get($id);
}
这是您网域的一部分。现在从Symfony& amp;学说:
use Doctrine\ORM\EntityRepository;
use Model\Repository\EntityRepository as BaseEntityRepository;
abstract class DoctrineEntityRepository extends EntityRepository implements BaseEntityRepository
{
public function get($id)
{
$entity = $this->find($id);
if (!$entity) {
throw new EntityNotFoundException();
}
return $entity;
}
public function add($entity, $sync = false)
{
// method implementation
}
public function remove($entity, $sync = false)
{
// method implementation
}
}
use Model\Repository\ProjectRepository as BaseProjectRepository;
class ProjectRepository extends DoctrineEntityRepository implements BaseProjectRepository
{
public function specificQueryForProjects()
{
// method implementation
}
}
这样,您不必仅因为代码自动完成而覆盖子类中的方法。您只需扩展接口即可让API用户知道返回值已更改。