为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
心有法竹 2023-03-04 17:58:58
我知道对此有很多疑问,但我的情况很奇怪。这是我的例子,我有一个名为 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 中。这个工作怎么样?
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

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


您会注意到甚至该{$theme}对象实际上也是未定义的(您可以通过 using 使其工作$this)。


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


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

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


private $env;


public function setEnv($env) {

    $this->env = $env;

}

现在,如果您使用 初始化主题$theme->setEnv($env),则在 include 中您将能够调用{$this->env['lang']}. 或者你可以构建一个辅助函数,或者甚至更好,声明一个允许你编写$this->lang.


就个人而言,我通常更喜欢不同的方法,并将序列替换为using{{name}}的内容。$this->env[name]preg_replace_callback()


查看完整回答
反对 回复 2023-03-04
  • 1 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号