【问题标题】:What is Iterables in PHP and why we use it?什么是 PHP 中的 Iterables 以及我们为什么使用它?
【发布时间】:2017-10-01 08:22:46
【问题描述】:

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

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

【问题讨论】:

  • 但我们为什么需要它?
  • 但是乔恩,我们也可以用 foreach 做到这一点。为什么我们需要迭代来这样做?
  • 我没有得到你想要解释的内容。但我的问题是,当我想做任何事情来集成时,我使用数组或对象,但迭代器概念对我来说是相当新的。它出现在 7.1 中,所以我想知道它需要什么?我们在哪里需要它?
  • 这可能会有所帮助wiki.php.net/rfc/iterable 拥有iterable 的主要优点是可以声明一个类、方法或函数参数iterable,但不关心实现,即数组、迭代器、生成器等。所以任何可迭代的东西都可以使用。

标签: php iterable php-7.1


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    通过使用一种称为 lazy in nature 的模式,该模式一次读取一个元素,您可以读取一个 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",));
    

    希望这会有所帮助;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-27
      • 2011-08-03
      • 2011-10-22
      • 2015-09-08
      • 2014-06-01
      • 2018-01-07
      • 2014-04-26
      • 2011-06-18
      相关资源
      最近更新 更多