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

我想你想要heredoc语法。

例如:

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

我不太确定你想要完成什么,但我认为类似heredoc 语法的东西可能对你有用:

<?
$variable = <<< MYSTRING

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

MYSTRING;

但是,如果您尝试制作 HTML 模板,我强烈建议您使用真正的模板引擎,例如SmartyDwooSavant

于 2009-10-17T06:51:02.977 回答
1

好的,你想做的事情是可能的。

您不能简单地将 HTML 块分配给 php 变量或使用函数这样做。但是,有多种方法可以获得您想要的结果。

  1. 研究模板引擎的使用(我建议你这样做,因为无论如何它都是值得的)。我用smarty,但还有很多其他的
  2. 第二种是使用输出缓冲区。

您遇到的问题之一是您页面中的任何 HTML 都会立即发送到客户端,这意味着它不能用作 php.ini 中的变量。但是,如果您使用函数 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 回答
-1
$html_content = '
    <p class="yourcssclass">Your HTML Code inside apostraphes</p>
';
echo $html_content;
于 2018-10-23T12:05:09.860 回答
-10

它真的很疯狂,但请注意,如果你这样做:

<?php echo ""; ?>  

你会得到的:

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

保持冷静,它唯一的 php 试图让你发疯。

于 2013-08-30T22:57:55.643 回答