使用 include 将变量传递到另一个页面

我知道对此有很多疑问,但我的情况很奇怪。


这是我的例子,我有一个名为 Theme 的类,它具有包含主题部分的功能;


class Theme {

  function getThemePart($part, $lang) {

    include_once 'theme/theme.'.$part.'.php';

  }

}

在我的 index.php 页面中,我调用它;


$theme->getThemePart('footer', $lang);

直到这里都很正常,但我也有一个 $lang 变量。我在 index.php 中声明它,但我也在 theme.footer.php 文件中使用它。像这样;


<footer class="sticky-footer">

    <div class="container-fluid copyright">

        <span class="float-right"><?=$lang['footer]?><a href="<?=$lang['footer_link]?>" target="_blank"><u><?=$theme->escLang('footer_jc','html')?></u></a></span>

    </div>

</footer>

我想你意识到在 getThemePart 的属性中有一个 $lang 并且它是无用的,但是,当我删除它时,在 index.php 文件中 $lang['footer'] 和 $lang['footer_link'] 没有打印但是当我将那个无用的 $lang 变量添加到正在打印的 getThemePart 中。


这个工作怎么样?


心有法竹
浏览 144回答 1
1回答

子衿沉夜

您的“页脚”文件仅存在于 getThemePart 函数中。因此,它不“知道”外部声明的任何内容。您会注意到甚至该{$theme}对象实际上也是未定义的(您可以通过 using 使其工作$this)。您需要做的是传递某种对主题元素需要知道的“世界”或环境的引用(这将是一种依赖注入):$env&nbsp; = [ 'lang' => 'en', ... ];您可以将其存储在主题中:private $env;public function setEnv($env) {&nbsp; &nbsp; $this->env = $env;}现在,如果您使用 初始化主题$theme->setEnv($env),则在 include 中您将能够调用{$this->env['lang']}. 或者你可以构建一个辅助函数,或者甚至更好,声明一个允许你编写$this->lang.就个人而言,我通常更喜欢不同的方法,并将序列替换为using{{name}}的内容。$this->env[name]preg_replace_callback()
打开App,查看更多内容
随时随地看视频慕课网APP