web-dev-qa-db-ja.com

PHP関数でHTMLを返す方法はありますか?(戻り値を文字列として構築せずに)

PHP関数を使用して、HTMLの標準ブロックを出力しています。現在は次のようになっています。

<?php function TestBlockHTML ($replStr) { ?>
    <html>
    <body><h1> <?php echo ($replStr) ?> </h1>
    </html>
<?php } ?>

関数内のHTMLを(エコーするのではなく)返したい。文字列にHTML(上記)を構築せずにこれを行う方法はありますか?

58
seanyboy

heredoc を使用できます。これは、変数補間をサポートしており、かなりきれいに見えます。

function TestBlockHTML ($replStr) {
return <<<HTML
    <html>
    <body><h1>{$replStr}</h1>
    </body>
    </html>
HTML;
}

ただし、マニュアルの警告に注意してください-閉じる行には空白を含めないでください。インデントすることはできません。

79
Paul Dixon

はい、あります。 ob_start を使用して、echoedテキストをキャプチャできます。

<?php function TestBlockHTML ($replStr) { ob_start(); ?>
    <html>
    <body><h1> <?php echo ($replStr) ?> </h1>
    </html>
<?php
    return ob_get_clean();
} ?>
65
Konrad Rudolph

これは大雑把な解決策かもしれませんが、関数の標準的な使用ではないので、これが悪い考えであるかどうかを指摘してくれる人に感謝します。 PHP関数からHTMLを取得して、戻り値を文字列として次のように構築せずに成功しました。

function noStrings() {
    echo ''?>
        <div>[Whatever HTML you want]</div>
    <?php;
}

関数を単に「呼び出す」:

noStrings();

そして、それは出力されます:

<div>[Whatever HTML you want]</div>

このメソッドを使用して、関数内でPHP変数を定義し、HTML内にエコーアウトすることもできます。

16
Lorien Brune

テンプレートファイルを作成し、テンプレートエンジンを使用してファイルを読み取り/更新します。これにより、将来的にコードの保守性が向上し、ロジックとは別個に表示されます。

Smarty を使用した例:

テンプレートファイル

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>{$title}</title></head>
<body>{$string}</body>
</html>

コード

function TestBlockHTML(){
  $smarty = new Smarty();
  $smarty->assign('title', 'My Title');
  $smarty->assign('string', $replStr);
  return $smarty->render('template.tpl');
}
6
Rob

別の方法は、 file_get_contents() を使用して、テンプレートHTMLページを作成することです

テンプレートページ

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>$title</title></head>
<body>$content</body>
</html>

PHP関数

function YOURFUNCTIONNAME($url){

$html_string = file_get_contents($url);
return $html_string;

}
5
Cayde 6

または、これをそのまま使用できます:

<?
function TestHtml() { 
# PUT HERE YOU PHP CODE
?>
<!-- HTML HERE -->

<? } ?>

この関数からコンテンツを取得するには、これを使用します:

<?= file_get_contents(TestHtml()); ?>

それでおしまい :)

1
Wahid Lahouiter

サードパーティのツールに依存する必要がない場合は、この手法を使用できます。

function TestBlockHTML($replStr){
  $template = 
   '<html>
     <body>
       <h1>$str</h1>
     </body>
   </html>';
 return strtr($template, array( '$str' => $replStr));
}
0
marrion luaka