在PHP尝试评估其真值之前,是否可以扩展/替换变量?
我正在尝试编写一个Wordpress模板,该模板将根据我们所在的页面执行不同的查询。如果我们在主页上,则查询应如下所示:
while ( $postlist->have_posts() ) : $postlist->the_post();
// code...
如果我们不在主页上,则查询应如下所示:
while ( have_posts() ): the_post();
// code...
所以我想我会试试这个:
$query_prefix = ( is_front_page() ) ? '$postlist->' : '';
$query_condition = $query_prefix.'have_posts()';
$query_do = $query_prefix.'the_post()';
while ( $query_condition ): $query_do;
// code...
问题是,这是创建一个无限循环,因为$query_condition
是一个字符串并且计算结果为TRUE。似乎PHP从不“读取”变量的内容。我需要我的变量从字面上扩展自己,然后才提供自己的评估。谁能告诉我怎么做?
答案 0 :(得分:3)
这些答案中的任何一个都有效,但提供另一种选择:
if(is_front_page()) {
$callable_condition = array($postlist,'have_posts');
$callable_do = array($postlist,'the_post');
} else {
$callable_condition = 'have_posts';
$callable_do = 'the_post';
}
while(call_user_func($callable_condition)) : call_user_func($callable_do);
此外,如果您在对象内,则可以使用array($this,'method')
来调用对象的方法。
答案 1 :(得分:1)
处理此问题的一种方法是使用while
条件中的逻辑或语句根据is_front_page()
的结果根据不同的对象进行循环,然后使用if
语句控制对the_post()
的调用。
// loop while the front page and $postlist OR not the front page and not $postlist
while ( (is_front_page() && $postlist->have_posts() ) || ( !is_front_page() && have_posts() ) ):
// use $postlist if on the front page
if ( is_front_page() && !empty($postlist) ){
$postlist->the_post();
} else {
the_post();
}
// the rest of your code
endwhile;
答案 2 :(得分:0)
可能是这样的例子可以帮助你。这是关于使用variables of variables:
class A {
public function foo(){
echo "foo" ;
}
}
$a = new A() ;
$obj = 'a' ;
$method = "foo" ;
${$obj}->$method() ; //Will echo "foo"
答案 3 :(得分:0)
我一直使用the_title来确定页面。
$isHomePage = false;
if(the_title( '', '', FALSE ) == "Home")
{
$isHomePage = true;
}
然后我使用$ isHomePage作为我稍后在页面中需要的任何其他内容的标志。可以更改此选项以查找要单独输出的任何页面。如果你有很长的页面名称,它会变得毛茸茸,所以就有了。