Wordpress可以有延迟加载查询吗?还是 PHP 的限制


Could Wordpress have lazy-loading queries? Or is it limitation of PHP?

这里有一个关于函数式Clojure语言与Python延迟加载和类似函数的有趣比较。这让我想到 - PHP 中没有类似的功能吗?例如,当您执行 Wordpress 查询时:

$loop = new WP_Query( ... )

您立即$loop->posts完整的帖子数组,并且(除非我弄错了(,该数组是在构造函数上完全创建的WP_Query。在Java或带有迭代器的Python中,您通常会有一个数据库游标迭代器,您可以调用get-next函数来根据需要获取下一项。

Wordpress不这样做的原因是基于PHP中缺乏这样的迭代器概念,还是其他原因?

简短的回答是,是的,您可以在 PHP 中迭代数据库游标。WP_Query() 类是一个方便的库,用于包装它并让您轻松使用该 API 中提供的筛选器/参数。最终,WordPress在当前版本和旧版本中使用mysql_*扩展(已弃用(,但是当使用较新版本的PHP时,它使用mysqli作为底层数据库连接器。

关于WP_Query,它的__construct()调用query()然后调用get_posts()。在第 3554 行,它使用 global $wpdb 对象来调用 get_results() 。这最终调用query()方法(并在内部_do_query()(,最后迭代第 1615 行的结果。

您可以自由使用WP_Query()$wpdb,甚至mysql_*/mysqli来处理WordPress中的数据库代码,从较高抽象级别到较低级别列出。诸如防止SQL注入之类的东西由较高级别的类提供,但是您可以对较低级别的类进行更多控制。

这里已经讨论了使用更有效的yield语句的可能性,显然部分阻力是WP需要在任何地方工作,即使在古老的系统上也是如此 - 这与它使用jQuery 1.x系列的原因相同,该系列适用于非常旧的IE版本。