什么是PHP中的Iterables以及我们使用它的原因?

时间:2017-05-03 13:12:37

标签: php iterable php-7.1

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

我想知道我们使用它的原因和位置? 可迭代有什么好处?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我是 PHP 的初学者,在过去的 5 个小时里我一直在研究这个主题。据我了解,iterator 允许我们读取大量发生在 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",));

希望这有帮助;)