迭代到对象时的PHP类型提示

时间:2014-12-18 11:02:25

标签: php object type-hinting

这是我在stackoverflow上的第一篇文章!

我正在开发一个PHP框架,我需要在对象上提供类型提示。

我将列出我正在使用的结构示例:

  • Database 类,用作“入口点”。这个类使用PDO连接到数据库,并且具有 UserSet 属性

  • UserSet 类,扩展 Set (打算作为用户集合)

  • 使用类似SQL的方法的 Set
  • 一个 User 类,只有Table props

实施例

Set 有一个select方法,它通过PDO返回一组用户;

$prepare = $this->database->prepare($this->sql);
$prepare->execute();
$prepare->setFetchMode(PDO::FETCH_CLASS,  $this->TABLE);
return $prepare->fetchAll();

UserSet 会覆盖通过 @method 运算符选择,如下所示:

/** @method User|UserSet select() blablabla */

通过这种方式,我可以在选择var

时获得类型提示
$result = $database->UserSet->select()

但是$ result都是User和UserSet类型,我在完成代码弹出窗口(Netbeans)中有来自User和UserSet的提示,而我希望它的类型为 UserSet ,并且只有在迭代时才有 User 提示。 (像UserSet< User>,像Java一样思考)

有可能达到这个目标吗?

对不起,很长的帖子!谢谢大家!

1 个答案:

答案 0 :(得分:0)

首先,如果您的select()方法始终返回return $prepare->fetchAll();,那么评论@method User|UserSet select()中的返回类型提示是错误的,因为PDOStatement::fetchAll()会返回一个数组。

假设您的$this->TABLE'User',那么您的select()方法会返回User个对象的数组。尝试这样暗示:@method User[] select()