Wordpress有懒惰加载查询吗?或者它是PHP的限制?

时间:2014-11-08 21:07:06

标签: php iterator wordpress

对于延迟加载和类似函数here,功能性Clojure语言与Python进行了有趣的比较。它让我思考 - PHP中没有类似的功能吗?例如,当您执行Wordpress查询时:

$loop = new WP_Query( ... )

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

基于PHP中缺少这样的迭代器概念或其他原因,Wordpress不会这样做的原因是什么?

1 个答案:

答案 0 :(得分:1)

简而言之,是的,您可以在PHP中迭代数据库游标。 WP_Query()类是一个便利库,可以将它包装起来,使您可以轻松使用该API中提供的过滤器/参数。最终WordPress在当前版本和旧版本上使用mysql_*扩展(不建议使用),但是在使用较新版本的PHP时,它使用mysqli作为底层数据库连接器。

关于WP_Query,其__construct()调用query()然后调用get_posts()。在line 3554,它使用global $wpdb对象来呼叫get_results()。这最终会调用query()方法(内部{和_do_query())并最终在line 1615上迭代结果。

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

已经讨论过使用更高效的yield语句的可能性here,显然部分阻力是WP需要在任何地方工作甚至古代系统 - 与使用适用于非常旧的IE版本的jQuery 1.x系列的原因相同。