我是.net开发人员刚开始使用Laravel框架开发PHP项目。在.net中,我们可以经常创建List。在PHP中执行相同操作的替代方法是什么?之后,我想将该列表作为方法参数&访问列表项。我在谷歌搜索但找不到合适的东西。我知道从PHP开发人员的角度来看,这可能是一个非常基本的问题。但我仍处于混乱状态不能继续我的工作。
例如在.net代码中,我们将列表对象创建为 -
public List<ReaderInfo> readerInfo = null;
在方法中传递该列表对象 -
InitReaderInfo(readerInfo);
方法定义写为 -
public void InitReaderInfo(List<ReaderInfo> reader)
现在,我想在PHP中转换相同内容。 有什么建议吗?
答案 0 :(得分:1)
PHP不是强类型语言。它也不支持generics或generic methods。这一般意味着你不能写这个:
public List<ReaderInfo> readerInfo = null;
或者这个:
public void InitReaderInfo(List<ReaderInfo> reader)
没有简单的方法可以通过定义元素来强制列出元素。但是,PHP支持argument types declaration,因此您可以执行此操作:
<?php
class Thing {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function __toString() {
return $this->name;
}
}
class Fruit extends Thing {}
class ThingList {
private $list;
public function __construct(Thing ...$list) {
$this->list = $list;
}
public function __toString() {
return array_reduce($this->list, function ($carry, $item) {
return $carry . $item . "\n";
}, '');
}
}
function PrintThings(ThingList $list) {
// ... do something to the thing list
echo $list;
}
?>
为了获得更好的类型安全性:
<?php
// declare a list of thing
$things = new ThingList(
new Thing("apple"),
new Fruit("orange")
);
PrintThings($things);
?>
如果您正在讨论Laravel特定解决方案,我建议您查看jcrowe/type-safe-collection库,您可以使用更少的人工来完成类似的操作。