簡體   English   中英

PHP產量與PDO獲取?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM