如何在php中创建对象列表

时间:2017-02-13 09:32:46

标签: php list

我是.net开发人员刚开始使用Laravel框架开发PHP项目。在.net中,我们可以经常创建List。在PHP中执行相同操作的替代方法是什么?之后,我想将该列表作为方法参数&访问列表项。我在谷歌搜索但找不到合适的东西。我知道从PHP开发人员的角度来看,这可能是一个非常基本的问题。但我仍处于混乱状态不能继续我的工作。

例如在.net代码中,我们将列表对象创建为 -

public List<ReaderInfo> readerInfo = null;

在方法中传递该列表对象 -

InitReaderInfo(readerInfo);

方法定义写为 -

public void InitReaderInfo(List<ReaderInfo> reader)

现在,我想在PHP中转换相同内容。 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

PHP不是强类型语言。它也不支持genericsgeneric 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库,您可以使用更少的人工来完成类似的操作。