我有一个使用private
变量的类,这些变量是“配置变量”,我需要它们有时“改变”(在我的例子中,如果我添加新语言,我需要在配置中也使用新语言)这是CodeIgniter的i18n库。
我需要从数据库设置$languages
和$special
。
class MY_Lang extends CI_Lang {
// languages
private $languages = array(
'en' => 'english',
'sk' => 'slovak',
'fr' => 'french',
'nl' => 'dutch'
);
// special URIs (not localized)
private $special = array (
"admin",
"link"
);
.
.
.
function MY_Lang()
{
parent::__construct();
.
.
.
我的想法是我生成一个文件并将其包含在库中。
如下:
我试过这个,所以每当管理员说到时,脚本都会生成文件language_config.php
。
class MY_Lang extends CI_Lang {
public function __construct()
{
parent::__construct();
include_once(APPPATH.'/config/system_generated/language_config.php');
// languages
$languages = $generated['languages'];
// special URIs (not localized)
$special = $generated['special'];
}
和生成的文件
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
// languages
$generated['languages'] = array(
'en' => 'english',
'sk' => 'slovak',
'fr' => 'french',
'nl' => 'dutch'
);
// special URIs (not localized)
$generated['special'] = array (
"admin",
"link"
);
我不是问如何生成文件,而是如何在库文件中包含和使用包含的文件(并将变量设置为私有)。 我无法在构造函数中设置私有变量有没有办法将包含的变量设置为私有?
编辑:解决方案
我忘记了private
规则和整个OOP $this->...
,下面的代码运行正常。
class MY_Lang extends CI_Lang {
private $languages;
private $special;
public function __construct()
{
parent::__construct();
include_once(APPPATH.'/config/system_generated/language_config.php');
// languages
$this->languages = $generated['languages'];
// special URIs (not localized)
$this->special = $generated['special'];
}
EDIT2:此
的另一个问题当我向我的班级添加新的__constructor()
时,它会导致问题,因为即使在我的“已添加”__constructor()
__constructor()
中,它也没有从CI_Lang调用parent::__constructor();
应该调用CI_Lang
__construcotr()
,但它不会。我甚至不知道如何调试它。
EDIT2的解决方案
我的代码中有2个构造函数。只需合并它们。
答案 0 :(得分:5)
在构造方法__construct()
中设置它们,如下所示:
private $languages;
private $special;
public function __construct()
{
$this->languages = $generated['languages'];
$this->special = $generated['special'];
}