也许我错过了一些东西,但是是否有任何选择来定义该函数应该具有参数或返回用户对象数组的示例?
考虑以下代码:
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不包括在内。
如果不包含它,您有任何线索为什么添加类型提示时不包含它?
对于当前的数组实现,由于数组本身不包含任何类型信息,因此需要在运行时检查所有数组元素。
它实际上已经为PHP 5.6提出过,但是被拒绝了:RFC“ arrayof” -有趣的是,并不是由于性能问题被忽略了,而是因为在如何实现它方面没有达成共识。还有人反对没有标量类型提示的情况是不完整的。如果您对整个讨论感兴趣,请在邮件列表档案中阅读。
恕我直言,数组类型提示将与带类型的数组一起提供最大的好处,我很想看到它们的实现。
因此,也许是时候制定新的RFC并重新开始讨论了。
部分解决方法: 您可以键入提示可变参数,从而将签名写为
function findUserByAge(int $age, User ...$users) : array 用法: findUserByAge(15, ...$userInput); 在此调用中,参数$userInput将“解包”为单个变量,并在方法本身中“打包”为数组$users。每个项目均已验证为类型User。$userInput也可以是迭代器,它将被转换为数组。
不幸的是,对于返回类型没有类似的解决方法,并且只能将其用于最后一个参数。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。