为什么WP_QUERY有返回同名公共属性的方法

时间:2015-01-08 作者:Andy

大多数(如果不是全部的话)is_* 中的方法WP_Query 类具有匹配的公共属性,并且这些方法似乎只返回属性,例如:

public function is_search() {
    return (bool) $this->is_search;
}
当属性已设置时,该方法的用途是什么?是否存在使用一个而不是另一个的用例?当然检查更有效$wp_query->is_search 结束$wp_query->is_search()?

Edit: 如果能得到关于WP_Query 方法。虽然我很感激给出的答案,但他们都提到了全球is_* 函数,而不是我所指的类方法

2 个回复
最合适的回答,由SO网友:Otto 整理而成

虽然您的is\\u search()示例很简单,也很难证明其合理性,但在OOP样式中,通常建议对此类内容使用getter和setter,而不是公共属性,原因有很多。

封装。的行为is_search() 返回布尔值,但用于确定是否正在进行搜索的方法将来可能会更改。现在is_search 变量在过程的早期设置,然后此函数返回它。更高版本可能会立即检查当前URL是否为搜索URL,具体取决于模板系统的更改方式。例如,该属性虽然是公共的,但以后可能会更改。现在它存储为布尔值,但可能类似于“search_string“”可以改为选中,然后返回一个布尔值is_search(). 函数的输出隐藏了所使用变量的内部状态,因为外部不需要知道这些状态。

公共方法,如is_search() 是您的接口,因此接口可以随时间保持更恒定。最好使用不太可能改变的东西(is_search() 只会实际返回布尔值)。

许多其他库和开发系统都知道getter和setter,并且在它们存在时工作得更好。这是一种常见的款式选择,最适合模具。

继承自类的类可以更改基本功能的工作方式,这些函数允许它们使用这些功能重写行为。必须保持变量的公共性并在内部修改它们更加困难,也更容易出错。

函数,甚至对象方法,都可以作为对过滤器函数等的回调传递。变量不能。

因此,您的问题的真正答案是is\\U搜索变量可能不应该是公共的。现有的方法相对正常。

编码时,要进行防御性编码。即使您可以访问is_search 变量直接使用is_search() 功能。如果变量在将来发生任何变化,函数将进行更改以适应它,并仍然为您提供正确的输出。

SO网友:Andrew Bartel

使那些只习惯于使用函数模板标记的人更容易开始开发,即。is_single(), is_archive() 等等,而不是强迫他们参加OOP速成班。这避免了$wp_query 我想是吧。在语义级别上,如果您将模板标记与have_posts(), the_post 模板中的etc,而不是混合检查$wp_query.

编辑:关于效率,我的C非常糟糕,所以我无法确定地查看解释器,看看函数调用与访问公共属性相比如何,但我打赌如果你对其进行基准测试,结果将微不足道。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post