[英]PHP yield vs PDO fetch?
昨天,我了解到PHP有一个yield()
方法。 我不确定它在PHP中的用处。
一位同事表示,它可以帮助SQL语句返回许多行,从而导致潜在的内存问题。 我相信他正在引用fetchAll()
。 但是,不是使用fetchAll()
,也可以使用fetch()
并逐个处理行。 因此, yield()
不是解决他所指的问题的关键。
我错过了关于yield()
vs fetch()
吗? 使用yield()
和generator有更多好处吗?
PS:与使用fetch()
相比,使用yield()
在大型应用程序中编写干净,可读和可维护的代码更容易。
因此,yield()不是解决他所指的问题的关键。
究竟。
但它可以让你伪装while()
/ fetch()
序列作为foreach()
调用,如果你愿意,也没有内存开销。
但是,PDO不是一个很好的例子,因为PDOStatement
已经实现了一个可遍历的接口,因此可以使用foreach()进行迭代 :
$stmt = $pdo->query('SELECT name FROM users');
foreach ($stmt as $row)
{
var_export($row);
}
因此,让我们将mysqli用于只能逐个传输结果的示例API。
编辑 。 实际上, 由于5.4.0 mysqli也支持Traversable ,所以使用yield和mysqli_result也没有意义。 但是,我们保留它用于演示目的。
让我们创建一个像这样的生成器
function mysqli_gen (mysqli_result $res)
{
while($row = mysqli_fetch_assoc($res))
{
yield $row;
}
}
现在你可以使用foreach获取行而不需要开销:
$res = $mysqli->query("SELECT * FROM users");
foreach (mysqli_gen($res) as $row)
{
var_export($row);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.