4

変数を使用するクラスがあり、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 として設定します)。コンストラクター内でプライベート変数を設定できません含まれる変数をプライベートとして設定する方法はありますか?

編集:解決策

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:これに関する別の問題

クラスにnew を追加したので、何らかの理由で CI_Lang から呼び出されない__constructor()ため、問題が発生します。これをデバッグする方法さえ知りません。__constructor()__constructor()parent::__constructor();CI_Lang __construcotr()

EDIT2へのソリューション

私のコードには2つのコンストラクターがありました。それらをマージするだけです。

4

1 に答える 1