【问题标题】:PHP Type Hinting when iterate into an object迭代对象时的 PHP 类型提示
【发布时间】:2015-02-17 03:33:04
【问题描述】:

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

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

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

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

  • 一个 UserSet 类,它扩展了 Set(用作用户集合)

  • 一个具有类似 SQL 方法的 Set
  • 一个 User 类,仅使用 Table 道具

例子

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,像Java一样思考)

有可能达到吗?

抱歉,帖子太长了!谢谢大家!

【问题讨论】:

  • 为什么你的select() 函数返回不同的类型?这取决于什么。此外,在这种情况下,您所问的更多与 IDE 相关,即 Netbeans。此外,为什么您希望在迭代时看到User 提示,那里的逻辑是什么?我几乎 99% 确定您所要求的内容无法在 Netbeans 中完成,但也许有其他解决方案可以解决您的问题。

标签: php object type-hinting


【解决方案1】:

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

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

【讨论】:

  • 是的,我知道,PDO::fetchAll 返回一个数组。我试图创建一个自定义集合,作为 UserSet,它是一个用户数组。
  • 对不起,如果我误解了你的问题。根据我从问题中收集到的信息,您的 UserSet 对象不像集合,而更像是 DAO(数据访问对象)。它具有访问像select() 这样的数据的方法,它返回数组(集合),但它本身不包含任何元素。
  • 由于您提供了select() 方法类型提示尝试作为一个问题,我指出了它的问题以及如何解决它。
猜你喜欢
  • 2011-04-29
  • 2017-11-21
  • 2013-07-18
  • 2017-09-09
  • 2023-03-22
  • 2016-05-07
  • 2020-07-24
  • 2015-11-28
相关资源
最近更新 更多