8

我刚刚从 PHP 7.1 文档中听说了 Iterables。但是没有得到它的实际用例,而且这个概念对我来说也不是很清楚。那么任何人都可以用一些简单的例子来解释它以更快地抓住它吗?

我想知道我们为什么以及在哪里使用它?可迭代有什么好处?

4

2 回答 2

3

这可能有助于wiki.php.net/rfc/iterable

拥有的主要优点iterable是可以声明类、方法或函数参数,iterable但不关心实现,即数组、迭代器、生成器等。所以iterable可以使用任何东西。

于 2017-05-03T13:35:14.613 回答
2

我是 PHP 的初学者,在过去的 5 个小时里我一直在研究这个主题。据我了解,aniterator允许我们读取大量发生 RAM 内存溢出的数据,例如对大型日志文件的分析。

通过使用一种本质上称为惰性的模式,一次读取一个元素,您可以读取一个 4GB 的文件,而无需将其全部加载到内存中。理论上,您可以处理无限量的信息。

为此,我们需要定义一些方法:

<?php
    class myIterator implements Iterator {
        private $position = 0;
        private $array = array("A","B","C",);

        public function __construct() {
            $this->position = 0;
        }
        function rewind() {
            $this->position = 0;
        }
        function current() {
            return $this->array[$this->position];
        }
        function key() {
            return $this->position;
        }
        function next() {
            $this->position++;
        }
        function valid() {
            return isset($this->array[$this->position]);
        }
    }

    $it = new myIterator;

    foreach($it as $key => $value) {
        var_dump($key, $value);
        echo "\n";
    }

在 PHP 7.1 中,这可以简化为:

<?php
    class myIterable {
        function foo(iterable $iterable){
            foreach ($iterable as $key => $value) {
                var_dump($key, $value);
                echo "\n";
            }
        }
    }
    $it = new myIterable;
    $it->foo(array("A","B","C",));

希望这可以帮助 ;)

于 2021-03-20T01:25:22.637 回答