PHP类私有变量从不同的(包含的)文件设置


PHP class private variable set from different (included) file

我有一个使用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'];
  }

当我添加新的__constructor()到我的类时,它会引起问题,因为它没有从CI_Lang调用__constructor(),因为某种原因,即使在我的"添加"__constructor()中,有parent::__constructor();应该调用CI_Lang __construcotr(),但它没有。我甚至不知道如何调试这个

解决方案

我的代码中有2个构造函数。

在构造方法__construct()中设置它们,如下所示:

private $languages;
private $special;
public function __construct()
{
    $this->languages = $generated['languages'];
    $this->special = $generated['special'];
}