我知道对此有很多疑问,但我的情况很奇怪。这是我的例子,我有一个名为 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()
- 1 回答
- 0 关注
- 143 浏览
添加回答
举报
0/150
提交
取消
