0

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 が変数の内容を決して「読み取らない」ようです。変数が文字どおりに展開される必要があり、それから評価のためにそれ自体を提供します。誰でもこれを行う方法を教えてもらえますか?

4

4 に答える 4

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')してオブジェクトのメソッドを呼び出すことができます。

于 2013-06-12T18:38:16.790 に答える
1

これを処理する 1 つの方法は、条件で論理 or ステートメントを使用し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;
于 2013-06-12T18:04:25.910 に答える
0

そのような例があなたを助けることができるかもしれません. これは変数の変数の使用についてです:

class A {
    public function foo(){
        echo "foo" ;
    }
}

$a = new A() ;

$obj = 'a' ;
$method = "foo" ;


${$obj}->$method() ; //Will echo "foo"
于 2013-06-12T18:05:48.707 に答える