我知道對此有很多疑問,但我的情況很奇怪。這是我的例子,我有一個名為 Theme 的類,它具有包含主題部分的功能;class Theme { function getThemePart($part, $lang) { include_once 'theme/theme.'.$part.'.php'; }}在我的 index.php 頁面中,我調(diào)用它;$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條經(jīng)驗 獲得超3個贊
您的“頁腳”文件僅存在于 getThemePart 函數(shù)中。因此,它不“知道”外部聲明的任何內(nèi)容。
您會注意到甚至該{$theme}對象實際上也是未定義的(您可以通過 using 使其工作$this)。
您需要做的是傳遞某種對主題元素需要知道的“世界”或環(huán)境的引用(這將是一種依賴注入):
$env = [ 'lang' => 'en', ... ];
您可以將其存儲在主題中:
private $env;
public function setEnv($env) {
$this->env = $env;
}
現(xiàn)在,如果您使用 初始化主題$theme->setEnv($env),則在 include 中您將能夠調(diào)用{$this->env['lang']}. 或者你可以構建一個輔助函數(shù),或者甚至更好,聲明一個允許你編寫$this->lang.
就個人而言,我通常更喜歡不同的方法,并將序列替換為using{{name}}的內(nèi)容。$this->env[name]preg_replace_callback()
- 1 回答
- 0 關注
- 113 瀏覽
添加回答
舉報
0/150
提交
取消