为什么PHP有迭代器对象?
今天我无意中发现了这一页,我想知道为什么需要这些课程。我想假设它们是有用途的,否则它们就不会在PHP中。当已经有非常简单的方法做这些事情时,我很难看到这些项目的好处 PHP成为一种更受尊敬的/面向对象的编程语言是否犯了错误?或者这样做真的有好处吗 一个很好的例子说明了有两种方法可以做到这一点:为什么PHP有迭代器对象?,php,iterator,Php,Iterator,今天我无意中发现了这一页,我想知道为什么需要这些课程。我想假设它们是有用途的,否则它们就不会在PHP中。当已经有非常简单的方法做这些事情时,我很难看到这些项目的好处 PHP成为一种更受尊敬的/面向对象的编程语言是否犯了错误?或者这样做真的有好处吗 一个很好的例子说明了有两种方法可以做到这一点: 您的示例并不是使用迭代器对象的真正原因。在大多数情况下,迭代器对象用于对类进行迭代,并将类直接用作迭代器 下面是一个简短的例子 当您使用单个数组时,在该数组上创建foreach非常容易。您的示例并不是使
您的示例并不是使用迭代器对象的真正原因。在大多数情况下,迭代器对象用于对类进行迭代,并将类直接用作迭代器 下面是一个简短的例子
当您使用单个数组时,在该数组上创建foreach非常容易。您的示例并不是使用迭代器对象的真正原因。在大多数情况下,迭代器对象用于对类进行迭代,并将类直接用作迭代器 下面是一个简短的例子
当您使用单个数组时,在数组上创建foreach非常容易。对于我的示例,我不会将答案限制为迭代器,而是包括可遍历的 看看SimpleXML(和)
非常有用且易于使用,并允许您将XML转换为可以迭代/遍历的对象,因为它扩展了提供该功能的类。我已经探索了一条相当多的XML之路,我很高兴它不必重新发明轮子来提供这一点。我确信还有更多的例子说明了它们的用途和存在的原因,但这是第一个我立即从中受益的非数组的例子。对于我的例子,我不会将答案限制在迭代器上,而是包括可遍历的 看看SimpleXML(和)
非常有用且易于使用,并允许您将XML转换为可以迭代/遍历的对象,因为它扩展了提供该功能的类。我已经探索了一条相当多的XML之路,我很高兴它不必重新发明轮子来提供这一点。我确信还有更多的例子说明了它们的用途和存在的原因,但这是第一个我立即从中受益的非数组的例子。您可能会遇到一个实例,您希望在该实例中实现到类中,这样您就可以对私有成员进行迭代,而无需将其公开,或创建公共功能:
class BaseballTeams implements IteratorAggregate
{
private $teams;
public function __construct( )
{
$this->teams = explode( ',', "Tigers,Cubs,Orioles,Mariners,Yankees,Blue Jays,Marlins" );
}
public function getIterator( )
{
return new ArrayIterator( $this->teams );
}
}
现在,您可以遍历私有$teams成员,如下所示:
$baseball = new BaseballTeams( );
foreach ( $baseball as $n => $t )
{
echo "<p>Team #$n: $t</p>";
}
$barball=新棒球队();
foreach($n=>t)
{
回声“Team#$n:$t”;
}
您可能会遇到一个实例,您希望在该实例中实现类中的,因此您可以对私有成员进行迭代,而无需将其公开,或者创建一个公共函数:
class BaseballTeams implements IteratorAggregate
{
private $teams;
public function __construct( )
{
$this->teams = explode( ',', "Tigers,Cubs,Orioles,Mariners,Yankees,Blue Jays,Marlins" );
}
public function getIterator( )
{
return new ArrayIterator( $this->teams );
}
}
现在,您可以遍历私有$teams成员,如下所示:
$baseball = new BaseballTeams( );
foreach ( $baseball as $n => $t )
{
echo "<p>Team #$n: $t</p>";
}
$barball=新棒球队();
foreach($n=>t)
{
回声“Team#$n:$t”;
}
迭代器包含在PHP中,因为它允许您对任意对象使用公共语言构造(如foreach),而不是局限于在内置对象(如数组)上循环。强制对象将其内部状态转换为数组供您迭代是一件麻烦事(并且破坏了封装),对于大型数据集,可能会导致系统内存不足。iterable通过让对象本身仅在被请求时返回单个元素来克服这两个问题。迭代器包含在PHP中,因为它允许您对任意对象使用公共语言构造(如foreach),而不是局限于在内置对象(如数组)上循环。强制对象将其内部状态转换为数组供您迭代是一件麻烦事(并且破坏了封装),对于大型数据集,可能会导致系统内存不足。iterable通过让对象本身仅在请求时返回单个元素,让您克服这两个问题。为什么它们不存在?数组(在PHPs意义上)非常有限。看看现有的迭代器。具体的描述了一些常见的用例(例如递归用例)。中的解释可能会有所帮助,尽管这是关于Java的,但为什么它们不应该存在?数组(在PHPs意义上)非常有限。看看现有的迭代器。具体的描述了一些常见的用例(例如递归用例)。中的解释可能会有所帮助,尽管这是关于java的