27

私はphpが初めてで、次のようなことができるかどうか疑問に思っています:

<?php
 ...
 magicFunctionStart();
?>

<html>
   <head>...</head>
   <body>...</body>
</html>

<?php
 $variable = magicFunctionEnd();
 ...
?>

私が今使わなければならないのは、

<?php
 ...
 $variable = "<html><head>...</head><body>...</body></html>"
?>

これは煩わしく、読めません。

4

7 に答える 7

75

「出力バッファリング」を試しましたか?

<?php
 ...
 ob_start();
?>

<html>
   <head>...</head>
   <body>...<?php echo $another_variable ?></body>
</html>

<?php
 $variable = ob_get_clean();
 ...
?>
于 2009-10-17T06:50:38.610 に答える
15

ヒアドキュメント構文が必要だと思います。

例えば:

$var = <<<HTML
<html>
   <head>
random crap here
</html>
HTML;
于 2009-10-17T06:52:36.457 に答える
4

何を達成しようとしているのかよくわかりませんが、ヒアドキュメント構文のようなものが役立つと思います。

<?
$variable = <<< MYSTRING

<html>
   <head>...</head>
   <body>...</body>
</html>

MYSTRING;

ただし、HTML テンプレートを作成しようとしている場合は、SmartyDwooSavantなどの実際のテンプレート エンジンを入手することを強くお勧めします。

于 2009-10-17T06:51:02.977 に答える
1

あなたがやりたいことは、ファッションで可能です。

HTML のブロックを単純に php 変数に割り当てたり、関数で割り当てることはできません。ただし、希望する結果を得る方法はいくつかあります。

  1. テンプレート エンジンの使用を調査します (とにかく価値があるので、これを行うことをお勧めします)。私はsmartyを使用していますが、他にもたくさんあります
  2. 2 つ目は、出力バッファーを使用することです。

あなたが抱えている問題の 1 つは、ページにある HTML がすぐにクライアントに送信されることです。これは、php で変数として使用できないことを意味します。ただし、関数 ob_start および ob_end_fush を使用すると、必要なものを実現できます。

例えば

<?php 
  somesetupcode();
  ob_start();  ?>
<html>
<body>
html text
</body>
</html>
<?php
  //This will assign everything that has been output since call to ob_start to your    variable.
  $myHTML = ob_get_contents() ;
  ob_end_flush();

?>

これが、php ドキュメントの出力バッファを読むのに役立つことを願っています。

于 2009-10-17T06:58:17.050 に答える
0

代替手段がある場合は常に、バッファー関数 (など) を回避することをお勧めします (同じシステム内のパーツと競合する場合があるため)。ob_start

私が使う:

function Show_My_Html()
{ ?> 
    <html>
      <head></head>
      <body>
         ...
      </body>
    </html>
    <?php 
}


...
//then you can output anywhere
Show_My_Html();
于 2015-06-13T17:18:19.223 に答える
-10

それは本当にクレイジーですが、それを行う場合は次のことに注意してください。

<?php echo ""; ?>  

あなたはそれを取得します:

<html><head></head><body></body></html>  

落ち着いてください、あなたを夢中にさせようとしているのはその唯一のphpです。

于 2013-08-30T22:57:55.643 に答える