正如其他人所提到的輸出緩衝可能是乾淨的解決方案在這裏,因爲它可以讓你的HTML模板遠離你的邏輯中分離出來。這樣你最終會在模板文件中獲得相當可讀的html,而不是意大利麪條代碼混亂。通過添加第二個參數(數組或對象,即
render_php('test.php');
你甚至可以讓這個更可重複使用:
function render_php($path)
{
ob_start();
include($path);
$var=ob_get_contents();
ob_end_clean();
return $var;
}
然後創建模板文件
//test.php
<?php for($i = 0; $i<5; $i++):?>
<p><?php echo $i;?></p>
<?php endfor ?>
然後調用你的函數
function render_php($path,array $args){
ob_start();
include($path);
$var=ob_get_contents();
ob_end_clean();
return $var;
}
現在讓我們看看這是怎麼有用
//create your template test.php
<?php for($i = $args['start']; $i<$args['end']; $i++):?>
<p><?php echo $i;?></p>
<?php endfor ?>
現在創建你的論點,並通過他們關閉的渲染方法
$args = array('start' => 0, 'end' => 5);
render_php('test.php', $args);
爲什麼這是有用的
現在你有一個可重複使用的功能這是非常有用的,不管你需要傳遞多少個參數,並且你的邏輯可以在你的顯示器的獨立文件中,使你的代碼更具可讀性。我們可以使用它來構建仍然易於閱讀的大塊html。
即
$article = array( //imagine we have an article that we have pulled from our database
'title' => 'Some Title',
'subtitle' => 'Some Sub Title',
'body' => 'lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris
eu nulla quis ligula ornare ultricies. Vivamus malesuada lectus a mi
auctor pellentesque. Maecenas eu ultricies sapien, ac porta augue. ',
'image' => 'img/some_image.jpg'
);
echo render_php('article.php',array $article);
,並創建一個模板
<!-- article.php -->
<!DOCTYPE html>
<html>
<head>
<title><?php echo $article['title']; ?></title>
</head>
<body>
<img src='<?php echo $article['image']; ?>' alt='whatever' >
<h1><?php echo $article['title']; ?></h1>
<h2><?php echo $article['subtitle']; ?></h2>
<p><?php echo $article['body'];?></p>
</body>
</html>
看看http://php.net/manual/en/function.eval.php。例如我想你想要'$ string = eval(file_get_contents('test.php'));'你需要取出'<?php'並更正'$ <5'。 – chris85
「我知道ob_start()解決方案,但它感覺很髒」爲什麼?據我所見,這就是你想要的? – PeeHaa
在這種情況下,@Peehaa是對的 - 你有你的解決方案,並且它有一個存在於php中的理由 - 供你使用它。 – somethinghere