PHPで変数に変数を代入した時に反映されない


変数animalsにHTMLの雛形を作っておいて、ホイールした時に雛形内の変数を反映させたいです。

構文

[code]

    if(x == 0) {
        $animals = '<div>' . $lion . '</div>';
        for($i=0; $i<5; $i++) {
          $lion = 'ライオン';
          echo $animals;
        }
    }
    
[/code]

理想

[code]

    <div>ライオン</div>
    <div>ライオン</div>
    <div>ライオン</div>
    <div>ライオン</div>
    
[/code]

結果

[code]

    <div></div>
    <div></div>
    <div></div>
    <div></div>
    
[/code]

です

すみません、質問の説明の仕方がとても下手くそなんですが、実際は  
$animalsには100行のHTML、PHP関数が書いてあります。  
$lionにはwhile文の際に実行されるthe_content()によって$animalsの内容を反映することができます。

$animalsには100行を20回ほどループするので無駄が多くサイトM3-2XLARGEのスペックでも速度が重くなっています。

そこであらかじめテンプレートを作成しておいて、whileでループしても既に書き込まれたものを反映させるだけなので、この方法を探しています。




`$animal`を関数にして呼び出してしまえばOKです。

[code]

    <?php
    
    $animals = function ($animal) {
        $_animal = htmlspecialchars($animal, ENT_QUOTES, 'UTF-8');
        return '<div>' . $_animal . '</div>';
    };
    
    for ($i=0; $i<5; $i++) {
        $lion = 'ライオン';
        echo $animals($lion) . PHP_EOL;
    }
    
[/code]

* * *

追記: 関数がお嫌いなら、`printf`とか:

[code]

    $div = '<div>%s</div>' . PHP_EOL;
    
    for ($i=0; $i<5; $i++) {
        $lion = 'ライオン';
        printf($div, $lion);
    }
    
[/code]




`$animal`を関数にして呼び出してしまえばOKです。

[code]

    <?php
    
    $animals = function ($animal) {
        $_animal = htmlspecialchars($animal, ENT_QUOTES, 'UTF-8');
        return '<div>' . $_animal . '</div>';
    };
    
    for ($i=0; $i<5; $i++) {
        $lion = 'ライオン';
        echo $animals($lion) . PHP_EOL;
    }
    
[/code]

* * *

追記: 関数がお嫌いなら、`printf`とか:

[code]

    $div = '<div>%s</div>' . PHP_EOL;
    
    for ($i=0; $i<5; $i++) {
        $lion = 'ライオン';
        printf($div, $lion);
    }
    
[/code]

