2010-12-09 69 views
6

我有一个是我的控制页面的输出函数:PHP包括一个可变的内部

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class='media-desc'>{$desc}</div>";

我想包括在定义的HTML中的文件“box.php”变量$page。我尝试这样做:

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class="inlinebox">" . include("box.php"); . "</div><div class='media-desc'>{$desc}</div>";

...但没有奏效。我怎么能把一个PHP包含在一个变量内?

回答

9

How can I put a php include inside of a variable?

# hello.php 
<?php 
    return "Hello, World!"; 
?> 

# file.php 
$var = include('hello.php'); 
echo $var; 

我一般会避免这样的事情虽然。

3

首先,不要在语句中使用分号。
其次,将include语句包装在括号中。

$page = "<div class='media-title'><h2>{$title}</h2></div> 
<div class='media-image'>{$image}</div><div class="inlinebox">" . 
(include "box.php") . "</div><div class='media-desc'>{$desc}</div>"; 

最后:在“box.php”文件,你需要做到以下几点:

<?php 
ob_start(); 

// your code goes here 

return ob_get_clean(); 

编辑:PHP Manual - Return:关于调用函数比赛的外侧返回一些信息。

+0

这将打开缓冲。也是一个好方法。 – santiagobasulto 2010-12-09 23:49:33

+0

我试过但没有任何回报。为了测试它,我把`<?php ob_start();回声“测试”;返回ob_get_clean(); ?>`作为我的box.php的内容,并没有做任何事情。我删除了ob_start和ob_clean,并输出了“测试”一词4次。标题两次,一次高于应该有的地方,一次低于应该有的地方。 – mattz 2010-12-10 00:17:32

2

编辑:

不知道这是否是有用的,但我认为,包括文件,以获得一块HTML的,是不是一个好的选择。它不可扩展。你可以尝试使用类似MVC的东西。你可以让你的控制器重新渲染你想要的内容。

$view = $controler->getElement('box'); 

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class="inlinebox">" . $view . "</div><div class='media-desc'>{$desc}</div>"; 

试着解耦你的代码。

我建议你看看一些MVC框架,在我看来,最好的一个是CakePHP。

+0

我同意你关于MVC,特别是CakePHP很棒。但在一些小型项目中(我想快速完成任务并转移到酷炫的项目),我会使用HTML for HTML ......所有这一切,看起来像OP正在使用模板系统,因此这不是小项目,因此MVC肯定会有帮助,因此你会得到+1。 – Stephen 2010-12-10 00:03:32

+1

感谢您的回复,但我认为这有点凌驾于我的头上。我确信这是一个非常好的方式,但我不知道你说的是什么一半是:) – mattz 2010-12-10 00:14:14

13

php.net

// put this somewhere in your main file, outside the 
// current function that contains $page 
function get_include_contents($filename) { 
    if (is_file($filename)) { 
     ob_start(); 
     include $filename; 
     $contents = ob_get_contents(); 
     ob_end_clean(); 
     return $contents; 
    } 
    return false; 
} 

// put this inside your current function 
$string = get_include_contents('box.php'); 
$page = '<div class="media-title"><h2>{$title}</h2></div>'; 
$page .= '<div class="media-image">{$image}</div>'; 
$page .= '<div class="inlinebox">' . $string . '</div>'; 
$page .= '<div class="media-desc">{$desc}</div>';