在主视图中我有这个功能
public function lang($file, $language){
require 'languages/'.$language.'/'. $file . '.php';
}
然后在视图文件home.php中我有
$this->lang('global','en');
滞后文件global.php
$lang = array (
'title' => 'mySite',
);
现在在home.php如果我使用print_r($lang);
没有任何反应。我在global.php
和home.php
中的数组下方复制并粘贴了相同的脚本,我看到了数组。所以文件已加载,但为什么我不能使用它home.php
?
答案 0 :(得分:4)
public function lang( $file, $language)
{
require_once("languages/{$language}/{$file}.php");
return $lang;
}
$lang = $this->lang('global','en');
print_r($lang);
我建议缓存结果,然后以这种方式访问。
var $cache = array();
public function lang( $file, $language)
{
if( !isset( $this->cache[$language][$file] ) )
{
require_once("languages/{$language}/{$file}.php");
$this->cache[$language][$file] = $lang;
}
return $this->cache[$language][$file];
}
$lang = $this->lang('global','en');
print_r($lang);
答案 1 :(得分:1)
这是因为添加变量的范围只是lang()
函数。
如果你想要我们在函数之外,你必须将它设置为一些对象变量。
以下是我要做的更改:
global.php
return array(
'title' => 'Sitename something'
);
并在函数中:
public function lang($file, $language)
{
if ( empty($this->translations ))
{
$this->translation = include 'languages/'.$language.'/'. $file . '.php';
}
}
现在,您应该能够在$this->translations
变量中看到该文件的内容。如果要缓存更多文件内容的一种语言,则必须创建一个二维数组,并将其存储在那里。
答案 2 :(得分:0)
问题是你是从函数内部加载lang文件,这意味着$lang
不会被放入全局范围,而是放在本地函数范围内。
使其有效的最低要求变化(但不是一个好主意)
假设您希望将 $lang
放在全局范围内,您可以明确地这样做:
public function lang($file, $language){
require 'languages/'.$language.'/'. $file . '.php';
$GLOBALS['lang'] = $lang; // "export" to global scope
}
更好的主意
有几件事可以改进:
$lang
的内容写入调用者的后面“ - 这不是好设计,它使代码更难维护您可以通过将语言文件内容存储在static
局部变量中并从函数中返回来一举杀死两只鸟:不再写入全局范围,并且变量保留其内容您不必每次都重新加载语言文件。它看起来像这样:
public function lang($file, $language){
static $cache = array();
if (empty($cache[$language][$file])) {
// load language files on demand
require 'languages/'.$language.'/'. $file . '.php';
$cache[$language][$file] = $lang;
}
return $lang; // return requested data, which is now definitely cached
}
要使用它,你会这样做:
$lang = $this->lang('global', 'en');
将原始变量转储到全局范围内并不总是最好的想法,但根据具体情况(小项目)可能没问题。
答案 3 :(得分:0)
在home.php中试试这个:
$Lang = $this->lang('global','en');
和这个
public function lang($file, $language){
return require 'languages/'.$language.'/'. $file . '.php';
}