将变量传递到带有include的另一个页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将变量传递到带有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时,它们将被打印。

这项工作如何?

答案

您的“页脚”文件仅存在于getThemePart函数内部。因此,它不会“知道”在外部声明的任何内容。

您会注意到甚至$theme对象实际上也是未定义的(您可以改为使用$this使它起作用)。

您需要做的是传递对主题元素需要知道的“世界”或环境的某种引用(这是一种依赖注入):

$env  = [ 'lang' => 'en', ... ];

您可以将其存储在主题内:

private $env;

public function setEnv($env) 
    $this->env = $env;

现在,如果您使用$theme->setEnv($env)初始化主题,则在包含内容内,您将可以调用$this->env['lang']。或者,您可以构建一个辅助函数,或者甚至更好,声明一个magic getter,使您可以编写$this->lang

个人,我通常更喜欢其他方法,并使用name$this->env[name]之类的序列替换为preg_replace_callback()的内容。

以上是关于将变量传递到带有include的另一个页面的主要内容,如果未能解决你的问题,请参考以下文章

如何将 php 变量传递给同一页面中的另一个表单?

如何使用java将数据从片段传递到android中的另一个片段?

将变量从一个表传递到另一个 PHP 页面中的另一个 [重复]

如何将数据从一个活动传递到android中的另一个活动片段? [复制]

将数据从片段列表视图项传递到活动字符串变量 onitemclicklistener

如何将快照数据从 futurebuilder 传递到同一页面中的另一个 futurebuilder?