What is the Equivalent of C#'s "List <String>


What is the Equivalent of C#'s "List <String>" in PHP?

我正在使用API,它要求我提供List <String>值。我正在写PHP,似乎只能在c#中找到这种类型。

是一个数组吗?逗号分隔的字符串?

PHP没有泛型类型的概念。

可以使用array():

PHP

 $arr = array();  
 $arr[0] = 'foo';

c#中的等效

List<string> arr = new List<string>(); 
arr.Add("foo"); 

我猜你可以使用一个简单的数组:

$list = array('string1', 'string2', 'string3');

$list = array();
$list[] = 'string1';
$list[] = 'string2';
$list[] = 'string3';

等。

是一个数组吗?

是的,是

逗号分隔的字符串?

不,它不是

PHP是无类型的,所以你可以使用你的数组为所有类型的变量,使用以下代码:

$arr=array();

如果您正在调用SOAP,那么您应该只使用php的SoapClient类,它可以很好地将wsdl中看到的类型转换为本机php结构,通常是数组或stdClass对象的实例,这是php的类类型,可以存储任何值作为属性。您还可以做更有趣的事情,比如告诉php的SoapClient将返回类型映射到您自己的php对象。

见http://us2.php.net/SoapClient也请参阅构造函数的定义http://us2.php.net/manual/en/soapclient.soapclient.php,其中一个名为'classmap'的选项解释了如何将返回的类型映射到您自己的类。还有一个'typemap'选项可以将返回类型映射到您自己的类型

这个线程是旧的,但我认为代码可能会有所帮助:

class ClientList implements IteratorAggregate {
   protected $data;
   public function __construct(Client ...$data){
      $this->data = $data;
   }
   public function getIterator(): Traversable {
      return new ArrayIterator($this->data);
   }
}
class Client {
}

$clients[] = new Client();
$clients[] = new Client();
$clientList = new ClientList(...$clients);
foreach($clientList as $client){
   var_dump($client);
}

现在,当你插入一个字符串,数字或东西,不是一个客户端实例,你会得到错误,感谢IteratorAggregate你可以迭代ClientList对象。