对于延迟加载和类似函数here,功能性Clojure语言与Python进行了有趣的比较。它让我思考 - PHP中没有类似的功能吗?例如,当您执行Wordpress查询时:
$loop = new WP_Query( ... )
你立即拥有完整的帖子$loop->posts
和(除非我弄错了),该数组是在WP_Query构造函数上完全创建的。在Java或带有迭代器的Python中,通常会有一个数据库游标迭代器,您可以调用get-next函数来根据需要获取下一个项目。
基于PHP中缺少这样的迭代器概念或其他原因,Wordpress不会这样做的原因是什么?
答案 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系列的原因相同。