开发者社区> 问答> 正文

PHP 7中的类型提示-对象数组

也许我错过了一些东西,但是是否有任何选择来定义该函数应该具有参数或返回用户对象数组的示例?

考虑以下代码:

name = $name; $this->age = $age; } /** * @return mixed */ public function getName() : string { return $this->name; } public function getAge() : int { return $this->age; } } function findUserByAge(int $age, array $users) : array { $result = []; foreach ($users as $user) { if ($user->getAge() == $age) { if ($user->getName() == 'John') { // complicated code here $result[] = $user->getName(); // bug } else { $result[] = $user; } } } return $result; } $users = [ new User('John', 15), new User('Daniel', 25), new User('Michael', 15), ]; $matches = findUserByAge(15, $users); foreach ($matches as $user) { echo $user->getName() . ' '.$user->getAge() . "\n"; } PHP7中是否有任何选项可以告诉函数findUserByAge应返回用户数组?我希望添加类型提示时应该可以,但是我还没有找到对象数组类型提示的任何信息,因此它可能未包含在PHP 7中。如果不包含它,您是否有任何线索呢?添加类型提示时不包括在内? 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-09 13:15:54 511 0
1 条回答
写回答
取消 提交回答
  • 不包括在内。

    如果不包含它,您有任何线索为什么添加类型提示时不包含它?

    对于当前的数组实现,由于数组本身不包含任何类型信息,因此需要在运行时检查所有数组元素。

    它实际上已经为PHP 5.6提出过,但是被拒绝了:RFC“ arrayof” -有趣的是,并不是由于性能问题被忽略了,而是因为在如何实现它方面没有达成共识。还有人反对没有标量类型提示的情况是不完整的。如果您对整个讨论感兴趣,请在邮件列表档案中阅读。

    恕我直言,数组类型提示将与带类型的数组一起提供最大的好处,我很想看到它们的实现。

    因此,也许是时候制定新的RFC并重新开始讨论了。

    部分解决方法: 您可以键入提示可变参数,从而将签名写为

    function findUserByAge(int $age, User ...$users) : array 用法: findUserByAge(15, ...$userInput); 在此调用中,参数$userInput将“解包”为单个变量,并在方法本身中“打包”为数组$users。每个项目均已验证为类型User。$userInput也可以是迭代器,它将被转换为数组。

    不幸的是,对于返回类型没有类似的解决方法,并且只能将其用于最后一个参数。

    2020-02-09 13:16:06
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载