4

不是线程的最佳名称,但仍然......

我有

<?php include('inc/nav_bar.php'); ?>
...
<?php
    main code block
?>

我需要将一个变量从“主代码块”打印到“nav_bar”块,有什么好的方法吗?

到目前为止,我发现的唯一解决方案是使用 javascript。

4

4 回答 4

1

如果我理解正确,您的 nav_bar.php 会打印出应该包含主代码块中变量值的内容。

然后你可以尝试“捕捉” nav_bar.php 的输出:

ob_start();
include('inc/nav_bar.php');
$navBarContent = ob_get_contents();
ob_end_clean();
// main code block: replace some placeholders in $navBarContent with variables content

编辑:但我同意其他人的观点。更好的解决方案是更改代码设计并使用类/函数。

于 2012-04-25T10:15:18.867 回答
0

您可以使用不同的方式 - 重新排列代码块或使用输出缓冲。

'nav_bar.php' 是否回显任何内容?尝试这个:

{nav_bar.php}
...
echo "some text %VAR% some text";
...

{main.php}
ob_start();
include 'inc/nav_bar.php';
$content = ob_get_contents();
ob_end_clean();
$var = doSomeCalc();
$content = str_replace('%VAR%', $var, $content);

echo $content;

或者您可以使用这种方式:

{main.php}
$main_var = doSomeCalc();
...
include 'inc/nav_bar.php';
...
echo "something else";


{nav_bar.php}
...
echo "some text $main_var some text"; // use $main_var defined earlier
...
于 2012-04-25T10:21:18.867 回答
0

我认为是时候开始在应用程序中使用MVC 模式了 :)

这将解决您所有的输出优先级问题。

在此处阅读更多内容: “什么是 MVC?”

于 2012-04-25T10:49:18.763 回答
-1

我会选择这种模式:

<?php
// main code block

include('inc/nav_bar.php');

但是,如果您想以自己的技能向前迈进,让您的生活更轻松,请使用模板(它采用由内而外的方法,而不是相反)。

如果您想使用一些现有的模板引擎,请查找 Twig 或 Smarty。我还强烈推荐 Zend Framework,它主要使用纯基于 PHP 的模板(您也可以使用其他引擎)和 Symfony(主要使用 Twig)。

于 2012-04-25T10:37:17.600 回答