WordPress中的静态方法与动态方法

时间:2018-08-24 作者:Fahad Sohail

这个问题是关于在类中使用动态方法而不是静态方法的著名辩论。根据我的研究,公认的想法是尽可能限制静态方法的使用。

现在,就WordPress而言,我有一个注册短代码的类。该短代码内置了一些逻辑,并且依赖于从正在使用它的页面中获取一些元值。

现在,我最近发现侧栏中还有一个小部件,它需要根据短代码中使用的相同逻辑使用相同的元值。

例如:在shortcode类中,我有一个方法可以获取所有的元值,并将它们存储在一个具有固定索引名称的数组中,我需要该值对应该名称。因此,获取后的数组类似于:

$locations = array( \'slug\' => \'new-york\', \'name\' => \'New York\', \'zipcode\' => \'123456\');
我的问题:

1-如果我在侧栏中创建一个新的类实例,我担心构造函数中的一个“shortcode”和两个“init”挂钩,我担心它们是否会影响性能。

2-而不是一次性获取post meta。现在我用同样的值取了两次。一个在短代码中,另一个在侧栏中。

我需要你们帮我建议一个更好的结构来解决这个公式,这样这两个问题都可以最小化。

1 个回复
SO网友:Tom J Nowell

这个问题是关于在类中使用动态方法而不是静态方法的著名辩论。根据我的研究,公认的想法是尽可能限制静态方法的使用。

如果需要存储某些内容,则需要是静态成员变量,这是有问题的。仅仅使用动态方法,它们比静态方法有很多优点,静态方法只有很少的优点和许多已知的缺点。但正如你所说,这是一场辩论,如果这是正确的,那么它在这里就没有立足之地。堆栈交换是一种问答;作为一个站点,而不是一个讨论论坛,您需要能够将答案标记为规范正确

1-如果我在侧栏中创建一个新的类实例,我担心构造函数中的一个“shortcode”和两个“init”挂钩,我担心它们是否会影响性能。

如果您的init例程非常昂贵,以至于重复执行两次会影响性能,那么您的init例程就有严重问题。您是否发出远程请求或获取数千篇帖子(或通过带有post元参数的WP\\u查询获取少量帖子?)

即便如此,只要测试一下就可以了。实现它然后比较页面加载时间和查询计数并不困难,可以使用查询监视器之类的插件来实现

2-而不是一次性获取post meta。现在我用同样的值取了两次。一个在短代码中,另一个在侧栏中。

这不是问题

忽略通过键和post ID获取post元值是一个非常快速的查询,所有这些都缓存在内存中。如果您有一个对象缓存,它甚至会在请求之间持久化。

事实上,WP通过在同一个查询中获取所有post meta,预先获取post meta以节省时间。

讽刺的是,那些试图限制WP_Query 获取,以便他们只能查询他们需要的是那些由于获取内容的大量小查询而速度较慢的对象

所以不,post meta只提取一次并缓存。要获取它两次,需要编写原始SQL

结束

相关推荐

Conditional loop for category

我想为父类别和子类别显示不同的样式我该怎么做?如果我浏览父类别,然后显示样式,当浏览子类别时,则显示不同的样式,如何仅显示父类别名称和此类别中的3篇文章1.父类别名称1……3此类邮件……2.父类别名称2……3此类邮件……