1

dtlan(text)たとえば、 < <li>タグに php 関数を追加したいのですが、問題が 1 つあります。私は今私のコードと出力を表示します:

echo "<a href=/".$array['id']."><li id='menu_".$array['id']."'>"
     .dtlan($array['name'])."</li></a>";

出力は次のようになります。

<a href='/2'> <li id='2'>wazaap </li></a>

実際の出力は次のとおりです。

   wazaaap
    <a href='/2'><li id='2'></li></a>

つまり、関数が最初に実行されます。そして今、タグに関数を挿入する方法について質問します。すべてに感謝し、私の醜い英語で申し訳ありません:D

4

2 に答える 2

2

関数は値を返さず、代わりにエコーすると思います(または確信しています)。

エコーする文字列を構築するプロセス中に関数が呼び出されるためです。つまり、html がエコーされるまでに、関数はすでにその値をエコーし​​ています。そのため、関数の結果が html の前に表示されます。

関数が値をエコーするのではなく、値を返すようにします。

function dtlan($x)
{
  // echo $x;  <- Not like this
  return $x; // But like this.
}

または、次のようにします。最初に最初の部分をエコーし​​ます。次に、関数にその部分をエコーさせます。次に、最後の部分をエコーし​​ます。

echo "<a href=/".$array['id']."><li id='menu_".$array['id']."'>";
dtlan($array['name']);
echo "</li></a>";

選択肢があれば、私は最初のものを選びます。

于 2012-09-22T10:09:54.423 に答える
0

PHP は、HTML で新しい文字列を作成します。解析は左から右に進み、PHP はすべての変数を解決します。次に、関数に入りdtlan(スタックにプッシュします)、dtlanecho を呼び出しているように見え、何も返しません。空の戻り値は空の​​文字列にキャストされます。

次に、マークアップの残りの部分が連結され、関数に渡されますecho(この関数には、括弧が必須ではない特殊な構文があります)。

エコー呼び出しの結果の順序は次のとおりです。

echo("wazaaap");
echo("<a href='/2'><li id='2'></li></a>");
于 2012-09-22T10:26:37.160 に答える